mysql 表选择未按逻辑列出

标签 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 可能小于当前日期但结束日期在 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";

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

最佳答案

如果此时运行,这是您所请求的。

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()

关于mysql 表选择未按逻辑列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239243/

相关文章:

存储过程 3 的 mySql 错误 1064

mysql - 如何在 mysql 上确定每个月的 1 号和 15 号

java - IF 语句中的日期类

mysql - 仅当表更新时触发

javascript - 如何将像 2020-01-06T17 :11:58. 643Z 这样的javascript日期转换为Excel中的日期时间?

javascript - 有没有一种方法可以从适用于所有浏览器的 ISO 8601 日期创建 JavaScript 日期实例?

python - 在 Python 中解析人类格式的日期范围

java - 调用方法时出现 NullPointerException

mysql - 为什么从 mysql workbench 执行的查询比直接从 mysql cli 执行查询花费的时间长得多?

java - JDBC MySQL自动将localhost转为127.0.0.1