使用"喜欢" MySQL查询中的运算符,包括ColdFusion变量

时间:2016-02-24 04:11:56

标签: mysql coldfusion

我正在建立一个相关的资源"在我们的图书馆搜索与特定飞机有关的文件的页面。如果参观者正在研究XV-1,我想找到所有包含名称" XV-1"在标题中。但我不想在XV-15上找到任何论文。飞机名称是ColdFusion变量,我们使用的是MySQL。

我现在使用的是什么:

WHERE title LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#trim(aircraftDesignation)#%" />

这将返回&#34; XV-1的转子系统&#34;正如所料,但也返回&#34;使用RotCFD预测隔离的XV-15转子性能&#34;我们不想要的。

我认为,如果我可以查询飞机的名称,而不是立即允许任何数字字符,但允许其他字符,如撇号或逗号,这可能会起作用。但是,我试过了

'%#trim(aircraftDesignation)#[^0-9]%'

'%#trim(aircraftDesignation)#[!0-9]%'

两者都没有返回任何东西。如果可能的话,我将非常感谢任何正确方向的帮助或推动!非常感谢你的建议。

更新:我的工作很糟糕。我很抱歉!我们确实有飞机指定领域。相关资源查询仅在访问者登陆特定页面时运行。例如,如果他或她登陆XV-1页面,则飞机指定将被赋予&#34; XV-1的值。&#34;相关资源的查询根据分配的飞机指定(每页不同)自动进行。没有用户输入。

我努力在&#34; XV-1&#34;之后不包括数字试图阻止XV-15上的论文在XV-1页面上展示。 XV-15上的论文将在XV-15页面上展示,因为&#34; XV-15&#34;是飞机指定。但是关于XV-167的论文(如果有这样的话)将不会出现在XV-15页面上。

我将此标记为ColdFusion,因为Aircraft Designation是查询中使用的CF变量。我尝试使用SQL(以及我对使用REGEXP的研究要么失败,因为我似乎没有正确使用变量。或者在REGEXP的情况下,无法将变量与正则表达式结合使用。

我希望这有助于澄清!非常感谢你的帮助。

另一个更新:像这样使用REGEXP:

WHERE title REGEXP '#trim(aircraftDesignation)#[^0-9]'

到目前为止工作正常!一篇论文&#34; XV-1&#34;在标题中,加上&#34; XV-1&#34;纸,都在显示。但XV-15论文却没有。我现场检查的所有其他搜索似乎都按预期工作。

全文搜索是一个很好的选择,我一定会进一步研究它。感谢大家的帮助和建议!我真的很感激。

1 个答案:

答案 0 :(得分:1)

我要感谢beloitdavisja在上面的评论中指出了正确的方向:

“您可能想尝试使用MySql的REGEX运算符而不是LIKE。dev.mysql.com/doc/refman/5.7/en/regexp.html - beloitdavisja”

这给了我正在寻找的结果,以及许多其他有用的信息。谢谢! Per Leigh指出,这是我最终使用的查询(为简洁起见省略了cfqueryparam):

SELECT sku, title, content, fileName
FROM sd_productsearch
WHERE title REGEXP '#trim(aircraftDesignation)#[^0-9]' AND sku NOT LIKE 'v_%' AND status = '1'
ORDER BY title

一点解释:此查询仅提取我们的技术论文,而非我们的一般兴趣杂志文章(以“v_”开头的SKU编号)。它还只显示我们图书馆的活动文件(状态为1)。我使用的REGEXP允许搜索该飞机页面的特定飞机指定,但之后过滤掉任何数字。它与我最初尝试做的类似,但我不知道REGEXP运算符。再次感谢beloitdavisja!

更新:感谢提醒,Leigh,范围变量和(特别是)cfqueryparam。如果有人想知道如何在REGEXP中使用它,这对我有用:

WHERE title REGEXP <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(aircraftDesignation)#[^0-9]">