2013-06-05 301 views
0

我試圖使用包含字符串的一部分列來從表中的數據匹配字符串

表search_data:

id  data 

1  news 
2  today  
3  latest 

當我使用關鍵字「新聞」

select * from search_data where data like '%news%' 

它正在提取結果。但是當我使用關鍵字'最新消息'

select * from search_data where data like '%latest news%' 

它不工作,它顯示一個空的結果集。

有人可以幫我查詢。

謝謝。

回答

0

這是因爲你正在尋找完整的字符串'最新消息'與文本任何一方。你需要做的where data like '%news%' or data like '%latest%',以實現他們未包含在同一行這兩個關鍵字的搜索

+0

這就是這樣 - 用戶將輸入關鍵詞,他可能輸入1個或多個關鍵字例如:「今日最新消息」或「今日最新消息」 '所以關鍵字數量不受限制。所以我必須相應地搜索。 – chaithanya

+0

@ Stephan的答案就是根據您的要求使用 –

1

您可以添加FULLTEXT索引,使您可以使用MATCH AGAINST

select 
    * 
from 
    search_data 
where 
    match(data) against ('latest news' IN BOOLEAN MODE) 

這將是最有效的方式,你可以閱讀更多here

0

我不知道你是什麼意思,但我想你想做點什麼騙這 select * from search_data其中數據如'%latest%'或數據如'%news %'

+0

就是這樣 - 用戶將輸入關鍵詞,他可以輸入1個或多個關鍵詞例如:'今日最新新聞'或'今日美國最新新聞',關鍵詞計數不受限制。所以我必須相應地搜索 – chaithanya

+0

哦,如果這樣,你可以爆炸用戶插入的內容,然後自己做一個查詢。我不知道你用什麼語言。在PHP中,我們可以做這樣的事情。use函數攻擊者($ userinput),那麼你會得到一個數組,然後你可以foreach()來創建一個SQL.but對於這一點,我真的不認爲使用sql來查詢是不錯的理想更多。我會考慮:SOLR對此,我認爲如果您有大量數據,速度會更快。 – Dean

0

select * from search_data其中數據如'%latest news%'在此查詢中提及最新消息,這意味着結果必須包含字符串中的「最新消息」,與您的數據集中不同,它不存在如何最新消息和新聞分開您可以在您的查詢中使用「或」和「和」運算符