gpt4 book ai didi

mysql - 如何在 Coldfusion/MySql 中进行固定数量的单词搜索动态?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:44 25 4
gpt4 key购买 nike

我正在尝试升级 Coldfusion8/MySQL 站点。该网站有一个复杂的搜索,(除其他标准外)获取文本字符串并在关键字表中搜索它们。

我不想做 FULLTEXT 搜索,因为完整的查询有很多额外的条件。我正在寻找的是使以下内容更加“动态”,这并不局限于 xy 词,因此可能会缩短一点(完整搜索有很多这样的 block )。

所以,假设我有一个搜索字符串,例如

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 个单词卡住?在这种情况下,我该如何预设param 值?

感谢您的帮助!

最佳答案

您可以通过在查询中将其作为列表循环遍历来展开搜索词,您还应该使用查询参数来防止 SQL 注入(inject)攻击。

<cfloop list="#textSearch#" index="word" delimiters=" ">
AND (
a.textSearch LIKE <cfqueryparam cfsqltype="cfsql_varchar" value="%#word#%">
OR a.textSearch_xl LIKE <cfqueryparam cfsqltype="cfsql_varchar" value="%#word#%">
OR a.ean = <cfqueryparam cfsqltype="cfsql_varchar" value="#word#">
)
</cfloop>

关于mysql - 如何在 Coldfusion/MySql 中进行固定数量的单词搜索动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com