mysql表选择没有逻辑列出

时间:2012-09-02 19:52:52

标签: mysql date

我编写了以下查询,尝试选择所有事件,其中开始日期是当前日期的任何内容(表中有start_date和end_date字段):

$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())的所有事件,甚至选择start_date可能小于当前日期但结束日期早于{的事件{1}}。关于如何解决这个问题的任何建议?我希望它显示所有事件,只要它们尚未通过(当然这意味着结束日期不小于当前实际日期)。

谢谢,

编辑:

NOW()

第一个加载事件后我修改它(修改不包括在内)但第二个失败了,我认为这是由于另外两个AND的结尾。

1 个答案:

答案 0 :(得分: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_date大于NOW()。所以只需删除- INTERVAL 30 DAY即可获得:

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