【问题标题】:mysql table selection not listing logicallymysql表选择未按逻辑列出
【发布时间】:2012-09-03 11:22:07
【问题描述】:

我编写了以下查询,该查询将尝试选择开始日期为当前日期的任何事件的所有事件(我在表中有 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。

【问题讨论】:

  • of course that means end date is not less than current real date 那不是说你需要WHERE end_date &gt;= now()吗?
  • @lanzz:你为什么不把它写成答案?

标签: mysql date


【解决方案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()

【讨论】:

  • 我尝试了最后一个没有间隔的,它没有工作。编辑问题以添加可能导致您的代码出现故障的另一部分代码
猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多