2012-06-19 28 views
13

我一直認爲您可以在LIKE統計中使用OR來查詢MySQL中的內容。所以,如果我想多場連勝比較1個關鍵字或詞:在MySQL的LIKE查詢中使用OR來比較多個字段

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

,如果我有話數組進行比較:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%'; 

我不相信語法但是,這是正確的。有沒有一種有效的方法,寫下這樣的東西,如:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'; 

我正在處理這個問題嗎?

+0

我只是想知道你的「字數組」算法......無論如何,你是否確定要檢索結果,如果一列像一個單詞,如果一列是另一個?這對我 – Sebas

+0

來說似乎是非常低效的,你也可以使用程序。 – vijay

+0

關鍵字來自搜索字段,因此用戶需要基於很多字段搜索數據庫。如果他們在搜索詞中使用了2個單詞,則爲這個詞搜索這兩個列仍然有意義。我不想排除一個字段,因爲它們包含多個相關單詞的可能性在那裏。 – RCNeil

回答

21

使用該::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
+0

啊。我認爲括號是必要的?這可以解釋爲什麼它以前不工作... – RCNeil

+1

是的。與...的優先級高於或等於大括號是必要的... –

+0

真棒。非常感謝你的回覆! – RCNeil

17

最接近你正在渴望語法是:

SELECT * FROM MyTable 
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%') 
AND (CONCAT(Column1, Column2) LIKE '%keyword2%') 

注意:在「%」,在搜索字符串的開頭排除使用索引。如果要搜索大量記錄,最好重新考慮實施。

+0

感謝您的迴應! – RCNeil

+1

如果您將兩個字符列添加在一起,它們將被轉換爲數字並添加。最有可能的是,結果將爲零,並且您的WHERE子句永遠不會評估爲true。要連接MySQL中的列,請使用CONCAT。 –

+0

感謝你,我更新SQL使用CONCAT()... – Mazrick