Mysql 使用unix时间戳选择最近5分钟内的行
我正在试图弄清楚数据是在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_
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_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命令行工具中尝试过该查询?