如何使用LIKE搜索精确的单词匹配?

时间:2014-01-24 00:41:42

标签: php mysql

大家好我正在使用以下查询来选择数据

mysql_query("SELECT * FROM prodcuts WHERE prod_name LIKE '%".$search."%'");

问题是,当你搜索时,我们说“他”选择的比我想要的要多。它需要'hello''helblabla'一切都带有'他'。

我想做的是当我们说你正在寻找playstation它接受以下搜索playstatioq,yplaystation,playstationq等。 所以我想允许搜索与确切的产品名称区别一个字母。任何想法如何做到这一点?

提前致谢

3 个答案:

答案 0 :(得分:1)

听起来像你想要的是Levenshtein distance。有关详细信息,请查看StackOverflow上的MySQL Levenshtein

答案 1 :(得分:0)

扩展Glen Solsberry写的内容,你可以使用'_'(下划线)进行单字母外卡搜索。例如:

"SELECT * FROM prodcuts WHERE prod_name LIKE '%_".$search."_%'"

如果您的$search var是' laystatio ',则此查询将匹配'playstation','yplaystation','playstationq'和'playstatioq'。

如果您的$search var是' playstation ',或' playstatioq '或' yplaystation ',请使用{{ 3}},下一个查询应返回您所追求的结果,以及一个紧密匹配的堆:

"SELECT * FROM prodcuts WHERE SOUNDEX(prod_name) LIKE SOUNDEX('".$search."')"

答案 2 :(得分:0)

你可以通过建立一个像Elastic Search或Solr这样为全文查询提供模糊匹配的索引来倾斜地解决你的问题。

根据您的问题规模,效率要求以及您需要匹配的模糊程度,它可以为您节省大量精力。另一方面,它当然可能有点矫枉过正。