2012-09-17 106 views
0

我想知道是否有任何可能的方法,藉此MySQL查詢可以動態搜索WHERE子句中的任何內容。MySQL「高級在哪裏」查詢

例如,如果查詢是

Select * 
from table 
where item = 'Dell Optiplex 390' 

應該尋找具有行:

Dell Optiplex 390 

Dell Desktop Optiplex 390 

Dell Laptop Optiplex 390 

Optiplex dual core 390 

etc., etc. 
+0

閱讀關於'全文搜索' –

+0

您是否需要所有單詞出現在結果中?您的最後結果「Optiplex雙核390」不符合要求。 – Michael

+0

我想,如果它匹配一個字,那麼該行應該考慮。 –

回答

1

對於這些類型的搜索功能,我認爲您正在尋找匹配算法。您可以使用Levenshtein Distance Algorithm,有一個php函數levenshtein,實現這個算法,如果您使用php,獲取匹配的數據,並且還有Needleman–Wunsch algorithm,並且如果您的數據只有英文和一個單詞列,則可以使用Soundex Algorithm

這是一個開始,你會在Mysql中找到這些算法的很多實現。

+0

中添加很多'喜歡'「有一個php函數實現這個算法」 - 你能提供一個鏈接嗎? – alfasin

+0

這是['int levenshtein(string $ str1,string $ str2)'](http://php.net/manual/en/function.levenshtein.php) –

+0

這正是我所需要的,謝謝! – alfasin

0

有這裏的好答案,被刪除了,我會修改答案:

Select * from table where 
lower(item) like '%dell%optiplex%390%' or 
lower(item) like '%optiplex%390%' or 
lower(item) like '%dell%laptop%390%' or ... 
+0

這是爲了防止他希望所有單詞出現在結果中! – Michael

+0

@Michael當然,你可以在'WHERE'子句 – alfasin

1

如果您需要知道該字段包含您的任何單詞。

Select * 
from table 
where item like '%Dell%' OR item like '%Optiplex%' or item like '%390%' 
0

使用SQL LIKE子句通配符:

SELECT * 
FROM table 
WHERE item LIKE '%Dell%Optiplex390%'; 

這裏有一個很好的參考指南:

+0

就是這樣,我寫了... – alfasin

+0

@alfasin,我可能在發佈之前沒有看到您的回覆。 – Sergiu