2013-04-16 85 views
0

我設法想出了一些幫助,但由於某種原因,它不能正常工作。 整個系列在最後的類別似乎是相當隨機的,我不能完全弄清楚它在做什麼。選擇/其中mysql沒有正確選擇

使用或持有似乎工作正常,因爲月份和我相信它是正常工作,如果所有項目都在一般類別,但任何其他地方,它變得很奇怪。

如果有人可以看到問題,我們將非常感激。

WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH(Display_Date)=4 AND Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers'

+0

請張貼一些樣品數據和所需的輸出 – Quassnoi

回答

0

AND有超過OR優先級,讓你的條件,現在讀的是:

WHERE ((Status = 'Used' OR Status = 'Holding') AND MONTH(Display_Date) = 4 AND Category = 'General') OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers' 

我想你想代之以:

WHERE status IN ('used', 'holding') 
     AND MONTH(Display_Date) = 4 
     AND category IN ('general', 'mountains', 'rivers', 'sky', 'grass', 'sea') 
+0

這是一種享受。謝謝。 – mark

0

最有可能它是與括號。我猜,你想,只要把東西like.-

WHERE (Status = 'Used' OR Status = 'Holding') AND 
     MONTH(Display_Date) = 4 AND 
     (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers') 

記住AND優先於OR,所以沒有括號,你原來的狀態會true任何一個OR語句是true,而不管之前的AND條件。

+0

非常感謝。也起作用。 – mark

0

我假設你說任何匹配你指定的任何類別值的結果(以及匹配對Status和Display_Date的檢查)應該被返回。如果是這樣的話,你需要用所有關於範疇的檢查括號:

WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH(Display_Date)=4 AND  (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers') 
+0

非常感謝。也起作用。 – mark