从日期时间在下一个小时内的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 ...,我不认为这是你想要的。

+0

是啊,这最后一段是我认为它可以做!感谢您的回答。让我试试看。 – alex 2010-04-15 05:22:05

WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR) 

意味着date_time现在等于现在减去一个小时,这将导致任何记录完全是一个小时。

为什么不使用

WHERE TIMEDIFF(date_time, NOW()) < '01:00:00' 
AND date_time > NOW() 
+0

为什么不呢?因为MySQL必须为每行计算表达式'TIMEDIFF(date_time,NOW())'而不是一次计算限制,并且不会使用'date_time'上的任何索引。 – Duncan 2010-04-15 05:47:19

+0

Thx提醒。 – 2010-04-20 09:18:56