0

我正在努力做到这一点,以便我可以选择低于 601(大约 10 分钟)的值。我time()用字段减去它time。我不明白为什么它不起作用。有人可以解释一下还是 SQL 没有这种能力。我没有收到任何错误,尽管它提供的数据没有多大意义。

$pdo->query("SELECT * FROM `online` WHERE '".time()."'-`time` > 601");

它似乎不起作用。

数据库

数据库

样本数据

id= 1

uid= 1

time= 1376252614 (老实说,我不知道为什么这是一个TEXT. 我以前没有遇到过问题,所以这就是为什么我认为这不是问题)

4

2 回答 2

1

如果您在 MySQL 中工作并且您的time列是DATETIMEorTIMESTAMP数据类型,请尝试此查询。

WHERE `time` >= NOW() - INTERVAL 601 SECOND

如果您的time列是包含 Unix 样式时间戳的整数(或显示整数的文本字符串),请尝试此操作。

WHERE `time` >= UNIX_TIMESTAMP() - 601

这种构造查询的方式允许 MySQL 利用time列上的索引。但是,如果时间戳是一个文本字符串,那么索引会有点奇怪。

请注意,这time是列名的次优选择,因为它是 MySQL 保留字。您必须一直努力将其括在反引号中,否则您会遇到奇怪的错误。

于 2013-08-13T01:28:24.727 回答
0

基本上你想要做的是以下几点:

pdo->query("SELECT * FROM `online` WHERE ADDTIME(time, '0 0:10:0') > NOW()")

这是使用 MySQL 实现目标的一种方式,还有其他功能,这只是我看到的第一个适合我需要的功能。

此方法会将您的时间增加 10 分钟,然后将其与当前时间进行比较,如果大于当前时间,则表示它发生在过去 10 分钟内。

于 2013-08-13T01:05:11.060 回答