从MySQL中显示在下一个小时内的日期时间行

8

我总是遇到复杂的SQL查询的问题。

这是我的查询语句:

$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行记录。我的查询语句是否有误?在我测试时,它似乎无法获取即将发生在下一个小时内的事件。
请问正确的语法是什么?
2个回答

14

我会假设你在查看包含一系列 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
否则,你的查询会查找日期时间正好为“现在+1小时”的记录。我假设你所有的日期不是特定于那一秒钟的。;)
稍作澄清,DATE_ADD()DATE_SUB() 返回精确的时间戳,因此你上面的查询大致转换为类似于SELECT ... WHERE date_time = '2010-04-14 23:10:05' ORDER BY ...的内容,这不是你想要的。

是的,我也觉得最后一段可能会这样做!谢谢你的回答。让我试试看。 - alex

0
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接