我正在尝试升级 Coldfusion8/MySQL 站点。该网站有一个复杂的搜索,(在其他标准中)获取文本字符串并在关键字表中搜索这些。
我不想进行 FULLTEXT 搜索,因为完整的查询有很多额外的条件。我正在寻找的是使以下内容更加“动态”,而不是将自己限制在 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>
在我的搜索查询中,我将搜索字符串与三个数据库字段匹配:
...
<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 个单词困住?在这种情况下,我将如何预设参数值?
感谢帮助!