我正在建立一个相关的资源"在我们的图书馆搜索与特定飞机有关的文件的页面。如果参观者正在研究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论文却没有。我现场检查的所有其他搜索似乎都按预期工作。
全文搜索是一个很好的选择,我一定会进一步研究它。感谢大家的帮助和建议!我真的很感激。
答案 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]">