2012-12-19 26 views
0

我試圖顯示結果匹配特定的時間表 - 這工作正常。但是,我想添加一個子句,說明顯示的結果必須是party_type 12AND或導致更多的結果出現比應該

所以我做了這個

WHERE start_datetime >= '$DATE_START_SELECTED' 
AND end_datetime < '$DATE_END_SELECTED' 
AND PARTY_TYPE='1' 
OR PARTY_TYPE='2' 
GROUP BY events.ENTRANCE_PRICE 

但現在它的顯示從昨天一些額外的活動......有趣的雖然是,它沒有顯示出進一步回任何事件。

+4

我會在這裏使用括號 – galchen

回答

9

這應該做的伎倆

WHERE start_datetime >= '$DATE_START_SELECTED' 
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE='1' 
OR PARTY_TYPE='2') 
GROUP BY events.ENTRANCE_PRICE 

的整個事情稍微乾淨的版本將是

WHERE start_datetime >= '$DATE_START_SELECTED' 
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE IN (1,2)) 
GROUP BY events.ENTRANCE_PRICE 

你可能也想看看here,以瞭解更多有關使用多個WHERE條件。

+0

它的確如此。謝謝! – pufAmuf

2

您需要使用括號來確保布爾值按照您的要求進行評估。特別是,組合在一起

(PARTY_TYPE='1' OR PARTY_TYPE='2') 

給你

WHERE start_datetime >= '$DATE_START_SELECTED' 
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE='1' OR PARTY_TYPE='2') 
GROUP BY events.ENTRANCE_PRICE 
+0

謝謝你可憐:) – pufAmuf

3

由於​​下記錄,ANDOR更高的優先級。因此,當前的過濾器被評估爲:

WHERE (  start_datetime >= '$DATE_START_SELECTED' 
     AND end_datetime < '$DATE_END_SELECTED' 
     AND PARTY_TYPE='1' 
    ) OR PARTY_TYPE='2' 

您應該添加括號強制適合您需求的優先級:

WHERE  start_datetime >= '$DATE_START_SELECTED' 
     AND end_datetime < '$DATE_END_SELECTED' 
     AND (PARTY_TYPE='1' OR PARTY_TYPE='2') 

,或者,使用MySQL的IN()操作:

WHERE  start_datetime >= '$DATE_START_SELECTED' 
     AND end_datetime < '$DATE_END_SELECTED' 
     AND PARTY_TYPE IN ('1','2') 
+0

謝謝eggypal!您的評論相當廣泛! – pufAmuf

0

在您的查詢中,AND和OR行爲的級別不明確。你想要把兩個條件放在同一個層次上:關於日期開始,日期結束(這些都是好的)和party_type(1或0)。相反,在你的查詢,你把他們當作四個獨立ones.Set這樣的:

start_datetime >= '$DATE_START_SELECTED' 
    end_datetime < '$DATE_END_SELECTED' 
    AND (PARTY_TYPE='1' OR PARTY_TYPE='2') 

我希望它能幫助。