2012-07-17 117 views
1

構建應用程序時,遇到了難以解決的難題。 我有一個表與幾個關鍵字,例如:使用sql進行關鍵字搜索

結構:

id keyword 
1 iphone 4 
2 iphone 4 16gb black 
3 iphone 3gs 
4 iphone 5 32gb white 
5 macbook pro 13" late 2009 
6 macbook air 15" 
... 

現在我想從使用關鍵字數據庫結果。 例如我正在尋找iphone 4 black。我試圖用這個 的方式來做到這一點:像%iphone%4%black這樣的關鍵字,但是我有這樣的問題,like中的關鍵字排序 很重要。所以我嘗試了mysql的fulltext-serach。但是這個搜索也會返回給我iphone 3gs,當搜索iphone 4

有沒有辦法解決這個問題?

回答

0

你可以試試這個:

WHERE keyword LIKE %iphone% AND keyword LIKE %black% 
1

試試這個:

where keyword like '%iphone%' 
and keyword like '%4%' 
and keyword like '%black%' 
+0

但是,這也會返回'iPhone 4s'。也許我應該在關鍵字的開頭和結尾添加一個空格? – charihans 2012-07-17 14:54:19

+0

但你也想匹配iPhone4,對吧? – 2012-07-17 15:15:24

+0

希望它不是一張大桌子,因爲這樣的查詢會很慢。 – Spudley 2012-07-17 21:41:43

1

使用多個LIKE條件一起:

WHERE keyword LIKE '%iphone%' AND keyword LIKE '%4%' AND keyword LIKE '%black%' 

那麼最終你可以真正開始屬性 「點」以不同的比賽來訂購你的結果通過一些花式的在你的ORDER BY

+0

但這也會返回'iPhone 4s'。也許我應該在關鍵字的開頭和結尾添加一個空格? – charihans 2012-07-17 15:02:20

+0

一個更好的解決方案海事組織是實現「 - 」操作符,讓你有一些不'LIKE'在你的SQL – Julien 2012-07-17 15:12:40

0

您是如何使用全文選項的?它需要在查詢中的文字?

但是,由於您嘗試過,請考慮使用布爾選項(http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html)。

這允許您指定在搜索中必須包含或排除的詞。在你的情況下,你想要包含所有內容,所以你需要一個搜索字符串,如「+ iphone +4」。您需要將其直接放入查詢中。

where match(keyword) against ('+iphone +4' in boolean mode) 
+0

這裏的問題是,我會得到iPhone 4S了。我怎樣才能排除這一點? – charihans 2012-07-17 15:09:34

+0

在搜索字符串中的「4」之後添加一個空格。 – 2012-07-17 15:10:26

+0

這個空間不會排除「4」在文本末尾的情況嗎? – jva 2012-07-18 06:33:17