我想编写一个查询,可以比较字符串中的单词并返回完全匹配而不是像。
让我说我有一个名为txt的字段,其值为“Hello,I is string”
现在如果我搜索“am”然后它应该返回该行,如果我搜索“I”或“string”或“Hello”,那么它应该返回此行但是如果我搜索“a”,“tri “或”str“然后它不应该返回任何东西
答案 0 :(得分:1)
正确答案可能是全文搜索。
但是,有两点需要注意。如果您有短字符串,例如产品说明或用户评论,并希望使用like
,则可以执行以下操作:
where concat(' ', txt, ' ') like concat('% ', $word, ' %')
但是,这假定分隔符是空格。所以,它找不到"你好"。您可以通过执行以下操作来解决此问题:
where concat(' ', replace(txt, ',' ' '), ' ') like concat('% ', $word, ' %')
但是你很快就会发现这很痛苦。因此:全文搜索。
其次,如果您真的在列中存储关键字,那么解决方案就更简单了。不要这样做。创建一个联结表,每个原始表行有一行,每个关键字有一行。在SQL中存储字符串中的列表是一个坏主意。