我正在构建一个“相关资源”页面,可以搜索与特定飞机有关的论文。如果访问者正在研究XV-1,我希望找到所有标题中包含“XV-1”标识的论文。但是我不想找到任何关于XV-15的论文。飞机标识是一个ColdFusion变量,我们正在使用MySQL。
目前我正在使用的方法:
WHERE title LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#trim(aircraftDesignation)#%" />
这将返回预期的"The XV-1's Rotor System",但也会返回我们不想要的"Using RotCFD to Predict Isolated XV-15 Rotor Performance"。
我认为如果我可以查询飞机型号,但不允许在其后紧跟任何数字字符,而允许其他字符如撇号或逗号,那么可能会起作用。然而,我尝试了
'%#trim(aircraftDesignation)#[^0-9]%'
并且
'%#trim(aircraftDesignation)#[!0-9]%'
两者都没有返回任何内容。如果可能的话,我非常感谢任何协助或指导方向!非常感谢您的建议。
更新: 我解释得不好,对此我深表歉意!我们有一个飞机型号字段。相关资源查询仅在访问特定页面时运行。例如,如果访问XV-1页面,则会将飞机型号分配为“XV-1”。相关资源的查询是基于分配的飞机型号(每个页面不同)自动进行的。不采用用户输入。
我不包括“XV-1”后面的数字是为了防止在XV-1页面上显示有关XV-15的论文。XV-15上的论文将显示在XV-15页面上,因为“XV-15”是飞机型号。但是,如果存在XV-167之类的东西,则不会在XV-15页面上显示。
我将其标记为ColdFusion,因为飞机型号是在查询中使用的CF变量。我尝试使用SQL(以及使用REGEXP的研究),但似乎未正确使用变量。或者在REGEXP的情况下,无法将变量与正则表达式结合使用。
希望这有所帮助!非常感谢您的帮助。
另一个更新: 使用REGEXP如下:
WHERE title REGEXP '#trim(aircraftDesignation)#[^0-9]'
目前为止工作正常!标题中带有“XV-1”的论文,以及“XV-1”的论文都显示出来了。但是XV-15的论文没有显示出来。我已经检查了其他搜索结果并似乎都是按预期工作的。
全文搜索确实是一个很好的选择,我一定会进一步研究它。谢谢大家的帮助和建议!我非常感激。
REGEX
运算符,而非LIKE
。http://dev.mysql.com/doc/refman/5.7/en/regexp.html - beloitdavisja