从日期时间在下一个小时内的MySQL中显示行
我总是遇到复杂的SQL查询问题。从日期时间在下一个小时内的MySQL中显示行
这是我
$query = '
SELECT id,
name,
info,
date_time
FROM acms_events
WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR)
AND active = 1
ORDER BY date_time ASC
LIMIT 6
';
我想多达6行被在一小时内即将举行。我的查询错误了吗?似乎没有在我测试它时在下一个小时内收到即将发生的事件。
这是什么正确的语法?
我会假设,你看的一组包含一系列DATETIME值的记录,所以你可能需要更多的东西是这样的:
SELECT id,
name,
info,
date_time
FROM acms_events
WHERE date_time < DATE_ADD(NOW(), INTERVAL 1 HOUR)
AND date_time >= NOW()
AND active = 1
ORDER BY date_time ASC
LIMIT 6
否则,你的查询寻找对于日期时间为的记录恰好为“now + 1 hour”。我假设你所有的日期都不是特定的那一秒。 ;)
要澄清一点,DATE_ADD()
和DATE_SUB()
返回精确的时间戳,所以你上面的查询大致翻译成类似SELECT ... WHERE date_time = '2010-04-14 23:10:05' ORDER BY ...
,我不认为这是你想要的。
WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR)
意味着date_time现在等于现在减去一个小时,这将导致任何记录完全是一个小时。
为什么不使用
WHERE TIMEDIFF(date_time, NOW()) < '01:00:00'
AND date_time > NOW()
为什么不呢?因为MySQL必须为每行计算表达式'TIMEDIFF(date_time,NOW())'而不是一次计算限制,并且不会使用'date_time'上的任何索引。 – Duncan 2010-04-15 05:47:19
Thx提醒。 – 2010-04-20 09:18:56
是啊,这最后一段是我认为它可以做!感谢您的回答。让我试试看。 – alex 2010-04-15 05:22:05