我继承了一个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
第一部分循环遍历四个字符串(分隔符逗号和空格)并查询数据库以查找匹配的关键字。然后它创建一个新的cond_cats变量,在实际搜索发生时使用该变量。我猜它用匹配的类别替换了搜索字符串,但我不确定这里,因为结果将是
AND (1=2 OR category1 = 12345 OR category2 = 88888 )
附加到实际的搜索查询中。
我的问题:
MySQL 中有没有办法拆分用户输入的搜索字符串,所以我可以运行循环?第二部分应该是存储过程的输出参数,不是吗?如果这在每次搜索之前运行,它应该是一个存储过程还是应该继续使用数据库查询?
感谢您的意见!