【问题标题】:Mysql, php query WHERE statement, recordset expire in +1 day of post date?Mysql,php查询WHERE语句,记录集在发布日期+1天到期?
【发布时间】:2010-11-11 18:14:25
【问题描述】:

我基本上设置了一个简单的日历。截至目前,它显示了“未来”事件。然后事件在那天到期......我很想找到一个 WHERE 语句,我可以用它来让那个“事件”在“post_date”之后保持 1 天

(因此,如果我将其发布为 11 月 15 日,)该活动将显示:活动名称 - 11 月 15 日

它会一直活跃到 post_date 后的 +1 天? (11 月 16 日为到期日)

这是我目前所拥有的:

WHERE DATE(FROM_UNIXTIME(`date`)) >= DATE(NOW())

提前谢谢...

【问题讨论】:

  • date 和/或post_date 列的数据类型是什么?

标签: mysql date-manipulation


【解决方案1】:
WHERE post_date > DATE(NOW())-INTERVAL 1 DAY

如果您真的想将post_dates 保留在 UNIX 时间戳中:

WHERE FROM_UNIXTIME(post_date) > DATE(NOW())-INTERVAL 1 DAY

【讨论】:

  • 太棒了!他们都工作得很好!我有什么理由应该使用:
  • WHERE FROM_UNIXTIME(post_date)+INTERVAL 1 DAY > DATE(NOW())
  • 注意,包含字段的运算符那一侧的表达式不要太复杂,否则不使用索引。我编辑了我的示例以使其清楚。 (虽然一个简单的“+”被优化掉了。)
【解决方案2】:

将 where 语句更改为:

WHERE DATE(FROM_UNIXTIME(`date`)) + INTERVAL 1 DAY >= CURDATE();

使用真正的 SQL 日期而不是 UNIX 时间戳也是一个好主意。有一些函数可以对它们进行计算。

【讨论】:

  • 这也很完美!!这两个答案有很大区别吗??
  • 差别不大。我的根据日期明确比较它并忽略时间。 @AndreKR 的版本明确使用“NOW”的日期部分(我使用了 CURDATE,它只返回日期)。 FROM_UNIXTIMESTAMP 的时间部分无论如何都会被有效地忽略。
  • WHERE FROM_UNIXTIME(post_date) + INTERVAL 1 DAY >= CURDATE() 这是两者的结合,可能会稍微快一点。
  • 在午夜切换的比较中,两个操作数之一必须是日期。另一个可以是时间。
猜你喜欢
  • 2011-09-26
  • 2011-04-21
  • 2011-04-23
  • 2016-10-22
  • 2012-07-29
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多