2014-04-22 54 views
0

我寫了一個查詢,用戶可以輸入一個字符串並從數據庫中獲取與該字符串相關的數據。MySQL字符串與通配符的比較

例如,用戶將輸入蘋果即使全名是蘋果公司

的代碼將被佈置爲使...

and Description like '%Apple%' 

這裏的問題是,它將與蘋果一起返回Snapple。
除了刪除第一個「%」通配符並使用戶類型更多,我怎樣才能將結果限制在Apple?

+0

爲什麼不,'AND Description ='Apple''? – majidarif

+0

是的,我不理解這個問題。如果你不希望它匹配傳遞的字符串之前的字母,只需刪除第一個通配符%,就像你自己說的那樣。 – CashIsClay

+0

描述不是Apple。這是蘋果公司,所以不會返回所追求的數據。我寧願保留通配符以防用戶錯誤。只是尋找其他建議,謝謝男孩! – nEWbie

回答

2

使用正則表達式:

WHERE Description RLIKE '[[:<:]]apple[[:>:]]' 

[[:<:]]一個單詞的開頭匹配,[[:>:]]一個單詞的結尾相匹配。用通配符(特別是領導通配符)字符串比較並沒有真正規模使用「喜歡」 -

由MySQL的

+0

不幸的是,由於全名是「Apple Inc」,所以不會返回記錄,但我肯定會研究該文檔。謝謝! – nEWbie

+0

爲什麼不能這樣工作? 'Apple'和'Inc'之間的空格是一個字邊界。 – Barmar

+0

對不起,我忘了把'LIKE'改成'RLIKE',現在應該可以工作了。 – Barmar

0

首先支持的所有正則表達式運算符見documentation。您可能想要看看full-text searching。這基本上給你「谷歌般的」文本搜索功能。

要回答你的問題,在大多數情況下,對於術語「蘋果」,「Apple」比「Snapple」更適合。所以,你可以在搜索中加入「匹配質量」的概念 - 例如:

select *, 10 as MatchQuality 
from table 
where description like 'Apple' 
union 
select *, 5 as MatchQuality 
from table 
where description like 'Apple%' 
union 
select *, 1 as MatchQuality 
from table 
where description like '%Apple%'