Coldfusion8/MySQLサイトをアップグレードしようとしています。このサイトには複雑な検索があり、(他の基準の中でも)テキスト文字列を取得してキーワードテーブルで検索します。
全文検索には多くの追加条件があるため、全文検索は行いたくありません。私が探しているのは、以下をより「動的」にすることです。これは、自分自身をxy単語に限定せず、それによってこれを少し短くする可能性があります(完全な検索にはこのようなブロックがたくさんあります)。
だから、私は次のような検索文字列を持っていると言います
I'm looking for something
私は現在これを行っています:
<!--- params --->
<cfparam name="s01" default="">
<cfparam name="s02" default="">
<cfparam name="s03" default="">
<cfparam name="s04" default="">
<cfparam name="s05" default="">
<!--- get length of search string --->
<cfset howManyWords = ListLen(textSearch," ")>
<!--- assign words to params --->
<cfif howManyWords gt 0><cfset s01 = trim(ListGetAt(textSearch, 1," "))></cfif>
<cfif howManyWords gt 1><cfset s02 = trim(ListGetAt(textSearch, 2," "))></cfif>
<cfif howManyWords gt 2><cfset s03 = trim(ListGetAt(textSearch, 3," "))></cfif>
<cfif howManyWords gt 3><cfset s04 = trim(ListGetAt(textSearch, 4," "))></cfif>
<cfif howManyWords gt 4><cfset s05 = trim(ListGetAt(textSearch, 5," "))></cfif>
私の検索クエリでは、検索文字列を3つのデータベースフィールドに一致させています。
...
<cfif textSearch neq "">
<cfif s01 neq "">AND (a.textSearch LIKE "%#s01#%" OR a.textSearch_xl LIKE "%#s01#%" OR a.ean = "#s01#")</cfif>
<cfif s02 neq "">AND (a.textSearch LIKE "%#s02#%" OR a.textSearch_xl LIKE "%#s02#%" OR a.ean = "#s02#")</cfif>
<cfif s03 neq "">AND (a.textSearch LIKE "%#s03#%" OR a.textSearch_xl LIKE "%#s03#%" OR a.ean = "#s03#")</cfif>
<cfif s04 neq "">AND (a.textSearch LIKE "%#s04#%" OR a.textSearch_xl LIKE "%#s04#%" OR a.ean = "#s04#")</cfif>
<cfif s05 neq "">AND (a.textSearch LIKE "%#s05#%" OR a.textSearch_xl LIKE "%#s05#%" OR a.ean = "#s05#")</cfif>
</cfif>
...
質問:
これをより動的にする方法はありますか?たとえば、ループを使用して、5つの単語にとらわれないようにする方法はありますか?この場合、パラメータ値をどのようにプリセットしますか?
手伝ってくれてありがとう!