大家好我正在使用以下查询来选择数据
mysql_query("SELECT * FROM prodcuts WHERE prod_name LIKE '%".$search."%'");
问题是,当你搜索时,我们说“他”选择的比我想要的要多。它需要'hello''helblabla'一切都带有'他'。
我想做的是当我们说你正在寻找playstation它接受以下搜索playstatioq,yplaystation,playstationq等。 所以我想允许搜索与确切的产品名称区别一个字母。任何想法如何做到这一点?
提前致谢
答案 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这样为全文查询提供模糊匹配的索引来倾斜地解决你的问题。
根据您的问题规模,效率要求以及您需要匹配的模糊程度,它可以为您节省大量精力。另一方面,它当然可能有点矫枉过正。