将数据库时间戳与当前时间进行比较

问题描述 投票:0回答:2

我在MySQL数据库中有许多记录,其中一个字段跟踪记录创建的时间。它的类型为'timestamp',默认设置为CURRENT_TIMESTAMP。我正在尝试访问所有比5分钟更新的记录。我在PHP页面中使用了以下查询:

SELECT username FROM liveusers WHERE timejoined < NOW() - INTERVAL 5 MINUTE)

由于某种原因,它没有选择任何记录,我不知道如何纠正它。 PHP代码很好,因为如果删除条件,它会选择所有记录。我究竟做错了什么?

mysql sql
2个回答
0
投票

我建议你使用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分钟前更长的日期。


0
投票

首先,您要将时间戳与日期进行比较。您希望首先使用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                          |

View on DB Fiddle

© www.soinside.com 2019 - 2024. All rights reserved.