我写了一个查询,用户可以输入一个字符串,并从数据库中获取与该字符串相关的数据。
例如,即使全名是Apple Inc,用户也会输入Apple。
代码将如此布局......
and Description like '%Apple%'
问题在于,它将与Apple一起返回Snapple 除了删除第一个"%"通配符并使用户输入更多内容,如何将结果限制为Apple?
答案 0 :(得分:2)
使用正则表达式:
WHERE Description RLIKE '[[:<:]]apple[[:>:]]'
[[:<:]]
匹配单词的开头,[[:>:]]
匹配单词的结尾。
有关MySQL支持的所有regexp运算符,请参阅documentation
答案 1 :(得分:0)
首先 - 与外卡(尤其是领先的外卡)的字符串比较并没有真正使用“喜欢”进行扩展。您可能希望查看full-text searching。这基本上为您提供了“类似谷歌”的文本搜索功能。
要回答你的问题,在大多数情况下,对于术语“苹果”而言,“Apple”比“Snapple”更好。因此,您可以在搜索中包含“匹配质量”的概念 - 例如:
select *, 10 as MatchQuality
from table
where description like 'Apple'
union
select *, 5 as MatchQuality
from table
where description like 'Apple%'
union
select *, 1 as MatchQuality
from table
where description like '%Apple%'