2012-09-02 44 views
0

我已經寫了下面的查詢,將嘗試選擇所有的事件,其中起始日期是從當前日期東西(我有表起始日期日期和結束日期字段):mysql表選擇不上市邏輯

$query = "SELECT id,title,start_date 
      FROM events 
      WHERE start_date > NOW() - INTERVAL 30 DAY AND city = '$cityName' 
      ORDER BY start_date DESC"; 

唯一上面的代碼有問題,因爲我意識到如果一個事件在NOW()之前3個月開始,那麼它就不會顯示。我去了,並試圖重新寫它,但它沒有奏效。這就是我管理:

"SELECT id,title,start_date 
FROM events 
WHERE start_date >= NOW() - INTERVAL 30 DAY || start_date <= NOW() && end_date >= NOW() - INTERVAL 30 DAY"; 

我試圖做的是選擇所有事件,其中起始日期是大於或等於當前日期(NOW()),甚至與起始日期選擇事件可能低於當前時間未定結束日期是在NOW()之後。有關如何解決這個問題的任何建議?我希望它能夠顯示所有事件,只要它們尚未達成(當然,這意味着結束日期不低於當前的實際日期)。

感謝,

編輯:

$query = "SELECT id,title,start_date FROM events WHERE start_date > NOW() - INTERVAL 30 DAY AND city = '$cityName' ORDER BY start_date DESC"; 

$query_posted = "SELECT id,title,start_date FROM events WHERE start_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) AND city = '$cityName' AND category = '$tag' ORDER BY start_date DESC"; 

我修改了它(不包括修改),但第二個失敗,我認爲這是由於另外兩個和的在後的第一個載入的活動結束。

+1

'當然,這意味着結束日期的不低於當前實際date'少那不是意味着你需要'WHERE END_DATE> = NOW()'? – lanzz

+0

@lanzz:你爲什麼不把它寫成答案? –

回答

1

這是你要求的,如果它現在運行。

WHERE start_date >= 2012-08-03 || start_date <= 2012-09-02 && end_date >= 2012-08-03 

爲了達到此目的,您需要使用圓括號分隔比較結果。

WHERE start_date >= NOW() - INTERVAL 30 DAY || (start_date <= NOW() && end_date >= NOW() - INTERVAL 30 DAY) 

或者,你可以使用BETWEEN操作:

WHERE start_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
    AND end_date >= NOW() - INTERVAL 30 DAY 

最後,你提到你想要的end_dateNOW()更大。所以剛落- INTERVAL 30 DAY獲得:

WHERE start_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() AND end_date >= NOW() 
+0

我嘗試了沒有間隔的最後一個,它沒有工作。編輯該問題以添加另一部分可能導致代碼錯誤的代碼 –