2014-01-24 135 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的,對全文查詢提供了模糊匹配的指數斜解決您的問題。

根據問題的規模,效率要求以及您需要匹配的模糊程度,它可以爲您節省大量的工作量。另一方面,它當然可能是過度的。