我正在尝试运行一个查询,该查询将选择due
列中带有日期的所有行,其中的日期分别为due
的时间戳15分钟,10分钟和5分钟,如果还有,从last_reminder
列中的时间戳记起15分钟
SELECT a.* FROM tasks a WHERE
a.due <> '0000-00-00 00:00:00' AND a.status = '' AND
(
due > NOW() - INTERVAL 15 MINUTE OR
due > NOW() - INTERVAL 10 MINUTE OR
due > NOW() - INTERVAL 5 MINUTE OR
last_reminder <= '".date('Y-m-d H:i:s', strtotime(date("Y-m-d H:i:s"). ' - 15 minutes'))."'
)
此查询返回所有行,无论时间是否在5分钟,10分钟或15分钟之内
答案 0 :(得分:0)
您的要求不太清楚。
但这很明显。该过滤器子句
due > NOW() - INTERVAL 15 MINUTE OR
due > NOW() - INTERVAL 10 MINUTE OR
due > NOW() - INTERVAL 5 MINUTE
在逻辑上等效于此。
due > NOW() - INTERVAL 15 MINUTE
另外,我想你想要这个
last_reminder <= '".date('Y-m-d H:i:s', strtotime(date("Y-m-d H:i:s"). ' - 15 minutes'))."
变成这个SQL
last_reminder <= '2019-01-23-06:45' - INTERVAL 15 minutes
我认为,您忘记了“间隔”。
此外,您可能需要php表达式date('Y-m-d H:i:s')
。这样可以像检索到的一样有效地检索当前的日期戳。或者,您可以只使用SQL的NOW()
并获得更简单的查询。
last_reminder <= NOW() - INTERVAL 15 minutes
要满足15/10/5的要求,也许您需要这样的东西:
SELECT IF(due>NOW()-INTERVAL 15 MINUTE AND due<=NOW()-INTERVAL 10 MINUTE, 'yes', 'no') ago15,
IF(due>NOW()-INTERVAL 10 MINUTE AND due<=NOW()-INTERVAL 5 MINUTE, 'yes', 'no') ago10,
IF(due>NOW()-INTERVAL 5 MINUTE, 'yes', 'no') ago5,
a.*
FROM ...
这将为您提供三列,显示您的行处于15分钟,10分钟还是5分钟类别。
要对计时问题进行故障排除,可以将其添加到SELECT子句中:
TIMEDIFF(NOW(), due) AS how_long_until_due,
它将针对每一行显示直到到期每个项目为止的时间。