4

我试图弄清楚在过去 5 分钟内是否将数据保存到数据库中。

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE

timestamp是一个 unix 时间戳(从 1970 年开始的毫秒)。

不起作用,我得到 nullnum_rows而不是 0 如果我使用

if (!isset($resultHistory->num_rows) || !$resultHistory->num_rows)

做动作,代码不进入循环..

我也试过

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
    FROM `table`
    WHERE DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE
4

2 回答 2

3

Current_timestamp 将当前日期返回为 SQL TIMESTAMP,而不是 UNIX 时间戳,因此您必须使用unix_timestamp函数进行转换:

SELECT COUNT(id), from_unixtime(`timestamp` / 1000, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` >= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000

编辑:

由于您的timestamp列包含 unix 时间,因此您还必须使用from_unixtime来格式化日期。

编辑2:

In MySQL UNIX time is the number of seconds since epoch (1/1/70), so if your timestamp column contains the number of milliseconds, you'll have to divide by 1000 as well.

于 2012-10-25T08:28:00.517 回答
2

你可以这样做:

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` BETWEEN (DATE_SUB(NOW(),INTERVAL 5 MINUTE)) AND NOW()
于 2012-10-25T08:27:33.393 回答