2012-08-23 69 views
5

這一定很簡單,但我擺弄它,並沒有得到我想要的任何東西。我有以下代碼:mysql在30天範圍內選擇日期

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

現在這個選擇在本月日期的事件,但在查詢中顯示本月的定義比我需要什麼不同。我需要它在30天內向我展示事件,而不僅僅是本月即8月。如果我在8月插入一個事件,它會顯示結果。如果我插入九月,它不會在30天之內。

+0

「......我擺弄着它......」太好了!趕快發佈你的[小提琴](http://sqlfiddle.com/),以便我們也可以擺弄它。 –

+0

哈哈沒有擺弄那裏說實話..更喜歡在開發環境,但感謝偉大的資源隊友 –

回答

39

你應該改變1 MONTH30 DAY

WHERE start_date > NOW() - INTERVAL 30 DAY 

將其限制在30天兩個方向:

WHERE start_date > NOW() - INTERVAL 30 DAY 
AND start_date < NOW() + INTERVAL 30 DAY 
+0

所以沒有end_date指定? –

+0

@sys_debug:你想結束日期嗎?你想要在30天之內還是之後?有沒有名爲'end_date'的列? –

+1

實際上不,謝謝,但這仍然無法正常工作......它沒有顯示2012-09-06 –

2

這個怎麼樣:

...WHERE DATE(start_date) BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) and DATE_SUB(NOW(),INTERVAL 1 DAY) AND city... 
1

OR

AND TIMESTAMPDIFF(DAY,YOURDATE,now()) < 30

這給你一個30天的跨度

1

我希望這也將有助於

SELECT id,title,start_date 
    FROM events 
WHERE city = "$cityName" AND 
TIMESTAMPDIFF(DAY,start_date,now()) < 30 
ORDER BY start_date DESC