2014-01-17 77 views
3

我現在有一個查詢,確保了一些術語不是在titledescription領域,像這樣:MySQL的不喜歡的是有沒有更好的辦法做到這一點

" ... title NOT LIKE '%word1% AND description NOT LIKE '%word1%' AND title NOT LIKE '%word2%' AND description NOT LIKE '%$word2%' ..." 

有沒有更好的辦法這樣做的原因是單詞數量將會增長,並且查看查詢時效果不佳。

+0

恐怕對於這個要求你沒有很多其他的選擇。在這種情況下看到'LIKE'的一些好的替代方案會很有趣 –

+0

你是什麼意思_「看起來效率不高」_? –

+0

對於每個關鍵字,只是看起來不太合適。我希望可能會有類似...不像(關鍵字1,關鍵字2,關鍵字3),我只是缺少語法 – bertster

回答

0

對於不同的字,你將不得不使用的條件,但是你可以縮短UR查詢與和的幫助下獲得性能如下查詢:
and (instr(title,'word1')<=0 and instr(description,'word1')<=0) and (instr(title,'word2')<=0 and instr(description,'word2')<=0)

+0

你讀過這個問題嗎? –

+0

對不起,您以前的帖子。我編輯了我的回覆。之前我給了一個簡短的回覆,但我的意思是這個。 – Krishna

+1

儘管這不是我的downvote,你的帖子仍然不正確。在這種情況下,您__不能使用'CONCAT()'。如果你與'「foo」匹配,你的'title'是'aaaaf','description'是'oobbbb',那麼查詢將會在它們應該被包含在結果中時被過濾掉。 –

0

你可以試試這個,

(title NOT REGEXP 'word1|word2|word3') AND (description NOT REGEXP 'word1|word2|word3'); 

編號:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

+0

REGEXP是一個殺手,只有在需要110%的時候才使用它。使用[BENCHMARK]進行測試(http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark) http://sqlfiddle.com/#!2/d41d8/29461: 使用LIKE:** 2232ms ** 使用REGEXP:** 14099ms ** – aconrad

+0

是的,剛剛嘗試過,效率低得多 - 儘管它確實有效。謝謝你的想法 – bertster

相關問題