2012-08-23 25 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