Mysql 使用unix时间戳选择最近5分钟内的行

Mysql 使用unix时间戳选择最近5分钟内的行,mysql,sql,unix-timestamp,Mysql,Sql,Unix Timestamp,我正在试图弄清楚数据是在5分钟内保存到数据库的 SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') FROM `table` WHERE `timestamp` >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE 时间戳是unix时间戳(从1970年起为毫秒) 不起作用,我得到nullnum_rows而不是0,如果我使用 if (!isset($resultHistory->num_

我正在试图弄清楚数据是在5分钟内保存到数据库的

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE
时间戳
是unix时间戳(从1970年起为毫秒)

不起作用,我得到null
num_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

你可以这样做:

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` BETWEEN (DATE_SUB(NOW(),INTERVAL 5 MINUTE)) AND NOW()

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

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时间,因此还必须使用来格式化日期

编辑2:


在MySQL UNIX中,时间是自epoch(1/1/70)以来的秒数,因此如果
timestamp
列包含毫秒数,则还必须除以1000。

hi@beny23,感谢您的回复。我试过了。我认为这是个问题,我完全清空了表,仍然得到
$result->num_rows=1
当我获取对象时
$row=$result->fetch_object(),我明白了null@devmonster:我想这是另一个问题,您是否直接在MySQL命令行工具中尝试过该查询?