2013-09-28 23 views
1

之間我有我的MySQL數據庫表的消息中的消息是這樣的Mysql的節目只能在日期

id message start_date end_date 
1 message1 2013-09-29 2013-11-30 
2 message2 2013-08-20 2013-09-30 
3 message3 2013-06-20 2014-01-01 
4 message4 2013-06-06 2013-09-20 
5 message5 2013-10-25 2014-03-05 

我想說明的消息時,start_date is equal to today and today is greater than start_date,也以同樣的方式,應該顯示消息``在end_date之前。一旦end_date被越過,那麼它不應該顯示消息。爲此,我已經這樣做了

SELECT * FROM messages WHERE start_date >= CURDATE() and end_date >= CURDATE(); 

但是這個顯示的是所有沒有開始日期的消息。像行5th(5 message5 2013-10-25 2014-03-05)一樣。所以我只想在start_date之間的消息是今天和start_date已被越過,它會顯示,直到end_date。那麼有人可以告訴我該怎麼做?任何幫助和建議都將非常可觀。由於

+0

鑑於你的數據。例如,你只需要一個返回行(ID = 1 )? – BellevueBob

+0

不,我希望在該日期範圍內有多行。 –

+0

然後在您的示例中給出數據,請顯示您想要返回的行。你的評論說你想要'start_date等於今天'的行,但你的代碼顯示「大於或等於今天」。換句話說,你不清楚你想要什麼。 – BellevueBob

回答

1

我想這是你所需要的:

編輯:

SELECT * FROM消息WHERE NOW()之間的起始日期日期和結束日期;

SELECT * FROM messages WHERE CURDATE() BETWEEN start_date AND end_date; 

僅供參考,您的原始查詢,你只需要比較起始日期時改變操作方向:

SELECT * FROM messages WHERE start_date <= CURDATE() and end_date >= CURDATE(); 
+1

請注意,您的第一個示例包含'start_date'的全部內容,但僅包含'end_date'的完整午夜。這通常不是人們想要的。使用'CURDATE()'而不是'NOW()'會解決它。 – eggyal

+0

確實,謝謝你指出,我更新了我的答案。 –