2010-08-03 43 views
1

下面的查詢是不工作的方式,我希望:MySQL MATCH反對查詢與長WHERE和OR語法?

SELECT DISTINCT * 
FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE' 

這是返回的結果數超過我預期 - 這不是限制我的結果那些在「榆樹」。

如果我刪除最後一行(AND Color ...),我可以看到我的MATCH AGAINST工作得很好,並且確實限制在'elm'上。

我需要做一個子查詢或什麼東西來拉的顏色的東西?正確的語法會非常有幫助,謝謝!

回答

4

會是這樣寫的,像這樣

SELECT DISTINCT * FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND Color IN ('RED', 'WHITE', 'BLUE') 

希望這有助於。

+0

這很有效,謝謝@Ash! – k00k 2010-08-03 14:10:48

0

括號可能會有幫助嗎?

SELECT DISTINCT * 
FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND (Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE') 
+0

添加括號使其工作就像我離開最後一行一樣。意思是,它返回所有顏色,不僅僅是紅色,白色,藍色。 – k00k 2010-08-03 13:45:12

0

使用MATCH AGAINST要求搜索每個單詞至少4個字符(反正默認情況下),所以'Elm'將被忽略。