我继承了coldfusion8网站,它使用了一些搜索功能。如何将搜索字符串coldfusion-loop转换为MySQL存储过程?
我试图将标准化的数据库查询存储到存储过程中。因为我是一个新手在两个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)的搜索可以是。我还是想知道,什么是happending,但到目前为止,我想,如果用户输入一个字符串,如:
string1, string2, string3 string4
第一部分遍历四根弦(分隔符逗号和空格),并querys的数据库匹配关键字。然后创建一个新的变量,在实际搜索时使用该变量。我猜它取代了搜索字符串,相匹配的类别,但我不知道在这里,因为其结果将是
AND (1=2 OR category1 = 12345 OR category2 = 88888)
这是附加到实际的搜索查询。
我的问题:
有没有在MySQL的方式来分割用户输入的搜索字符串,所以我能够运行循环?第二部分应该是存储过程的外部参数,不是吗?如果这是在每次搜索之前运行的,它应该是存储过程还是应该继续使用数据库查询?
感谢您的一些意见!
感谢您的信息。不知道它是否有帮助,但我valueList可能会有用。 – frequent
听起来好像你的问题是“这会比存储过程更好吗?” IMO no。所以上面的代码演示了如何更有效地编写cfquery *和安全*(没有所有的连接,即动态sql)但是随时留下问题以获得其他意见。 – Leigh
对不起。我不清楚。问题被正确回答。我的示例代码出现错误,因此您的代码段适用于错误的示例代码。问题是categoryID1应该是categoryID1和cateogryID2。 ID1是运动用品的产品分类的名称,服装的ID2。所以我需要检查任何关键字是否与两个索引中的任何类别匹配,并返回每个索引中的类别编号(如果有的话)。我的例子只是轮询ID1,所以IN会工作。我还没有找到一种方法来使用它与两个单独的ID。我编辑了我的问题。再次感谢您的输入! – frequent