我在MySQL数据库中有许多记录,其中一个字段跟踪记录创建的时间。它的类型为'timestamp',默认设置为CURRENT_TIMESTAMP。我正在尝试访问所有比5分钟更新的记录。我在PHP页面中使用了以下查询:
SELECT username FROM liveusers WHERE timejoined < NOW() - INTERVAL 5 MINUTE)
由于某种原因,它没有选择任何记录,我不知道如何纠正它。 PHP代码很好,因为如果删除条件,它会选择所有记录。我究竟做错了什么?
我建议你使用DATE_SUB:
SELECT username FROM liveusers WHERE timejoined > DATE_SUB(NOW(),INTERVAL 5 MINUTE);
https://www.w3schools.com/sql/func_mysql_date_sub.asp
你正在以相反的方式进行比较。较新的记录应该具有比5分钟前更长的日期。
首先,您要将时间戳与日期进行比较。您希望首先使用UNIX_TIMESTAMP()
进行日期转换
5分钟是300秒。让我们想象有人加入50和NOW()
是301(它应该是“更新”)。 WHERE timejoined < UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE)
将成为 - > WHERE 50 < 301 - 300
你想写:
WHERE timejoined > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE)
架构(MySQL v5.7)
查询#1
SELECT UNIX_TIMESTAMP(NOW() - INTERVAL 4 MINUTE) > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE) AS "is 4 minutes ago \"newer\" ?";
| is 4 minutes ago "newer" ? |
| -------------------------- |
| 1 |
查询#2
SELECT UNIX_TIMESTAMP(NOW() - INTERVAL 6 MINUTE) > UNIX_TIMESTAMP(NOW() - INTERVAL 5 MINUTE) AS "is 6 minutes ago \"newer\" ?";
| is 6 minutes ago "newer" ? |
| -------------------------- |
| 0 |