検索機能を使用している coldfusion8 サイトを継承しました。
標準化されたデータベース クエリをストアド プロシージャに格納しようとしています。私は Coldfusion と MySQL の両方の初心者なので、MySQL でこれを行うことができるかどうか疑問に思っています。
<cfquery datasource="db" name="find_cats">
SELECT wg.no, wg.type, wg.keywords, wg.lang
FROM cats AS wg
<cfloop list="searchForm.cats_search_string" delimiters=", " item="tag">
WHERE wg.keywords LIKE <cfqueryparam value='%#tag#%' cfsqltype='cf_sql_varchar'> AND
</cfloop>
wg.lang = <cfqueryparam value="#Session.lang#" cfsqltype="cf_sql_varchar">
</cfquery>
<cfset cond_cats = "AND (1=2">
<cfoutput query="find_cats">
<!--- check if found category belongs to either AAA or BBB classifcation --->
<cfif wg.type is "AAA">
<cfset cond_cats = cond_cats & " OR categoryID1 = #wg.no#">
</cfif>
<cfif wg.typ is "BBB">
<cfset cond_cats = cond_cats & " OR categoryID2 = #wg.no#">
</cfif>
</cfoutput>
<cfset cond_cats = cond_cats & ")">
検索は、キーワードまたはインデックス (AAA、BBB) ベースのいずれかです。私はまだ何が起こっているのかを理解しようとしていますが、これまでのところ、ユーザーが次のような文字列を入力すると思います:
string1, string2, string3 string4
最初の部分は、4 つの文字列 (区切り文字のコンマとスペース) をループ処理し、一致するキーワードについてデータベースにクエリを実行します。次に、実際の検索が行われるときに使用される新しいcond_cats変数を作成します。検索文字列を一致するカテゴリに置き換えると思いますが、結果は次のようになるため、ここではわかりません
AND (1=2 OR category1 = 12345 OR category2 = 88888 )
実際の検索クエリに追加されます。
私の質問:
MySQL でユーザーが入力した検索文字列を分割して、ループを実行できるようにする方法はありますか? 2 番目の部分は、ストアド プロシージャの out-parameter である必要がありますね。これがすべての検索の前に実行される場合、それはストアド プロシージャである必要がありますか、それともデータベース クエリを使用し続ける必要がありますか?
ご意見ありがとうございます。