2014-01-24 96 views
0

你好,大家好我使用下面的查询来选择数据如何不使用LIKE搜索精确的单词匹配?

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

问题是,当你搜索让我们说“他”是选择比我更想。它需要'hello''helblabla''he'。

我想要做的是当我们说你正在搜索的PlayStation它接受以下搜索playstatioq,yplaystation,playstationq等.. 所以我想让搜索不同的确切的产品名称的一封信。任何想法如何做到这一点?

在此先感谢

+0

什么是产品? – Strawberry

回答

0

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

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

如果您$search变种是 'laystatio',这个查询将匹配 '游戏机', 'yplaystation', 'playstationq' 和 'playstatioq'。

如果您$search var为“的PlayStation”或“playstatioq”或“yplaystation”,使用soundex,这下查询应返回是一个接近的结果,你是后,加上堆比赛:

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

谢谢我会用这个,直到我明白Levenshtein的距离。 – user3188287

0

你可能通过建立的东西,如弹性搜索或Solr的,对全文查询提供了模糊匹配的指数斜解决您的问题。

根据问题的规模,效率要求以及您需要匹配的模糊程度,它可以为您节省大量的工作量。另一方面,它当然可能是过度的。