我编写了以下查询,尝试选择所有事件,其中开始日期是当前日期的任何内容(表中有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的结尾。
答案 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()