2012-09-02 99 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

我尝试了没有间隔的最后一个,它没有工作。编辑该问题以添加另一部分可能导致代码错误的代码 –