我有一个表格,其中包含将来的几个UNIX时间戳,我需要找到比NOW()
更早或者在过去10分钟内的时间戳。
这是我尝试使用的查询无效
SELECT
TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(`expires`))) AS `time_diff`
FROM
`video_table`
WHERE
time_diff < NOW() OR time_diff > '-600'
有人能指出我为什么不起作用的方向吗?
答案 0 :(得分:1)
time_diff
会为您提供NOW()
和expires
列之间的区别。你想要的是实际检查NOW()
&lt; expires
(time_diff
&lt; 0)或者它是否(NOW()+ 600s&lt; expires)(time_diff
&lt; ; 600)。所以足以检查后者:
SELECT
TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(`expires`))) AS `time_diff`
FROM
`video_table`
HAVING
`time_diff` < 600
答案 1 :(得分:1)
问题不太清楚,但我想尝试回答一些情况。
此查询将返回已过期的所有记录:
SELECT * FROM video_table WHERE expires < UNIX_TIMESTAMP()
这将返回所有即将过期的记录(它们将在10分钟后过期):
SELECT * FROM video_table
WHERE expires>=UNIX_TIMESTAMP() AND expires<UNIX_TIMESTAMP() + 600
这将返回将来的所有记录(它们将在10分钟后过期):
SELECT * FROM video_table WHERE expires>UNIX_TIMESTAMP() + 600
答案 2 :(得分:0)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,expires INT NOT NULL);
INSERT INTO my_table(expires) VALUES
(1442075399),
(1442075499),
(1442075599),
(1442075699),
(1442076106),
(1442076206),
(1442076306),
(1442076406);
SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
| 1442075727 |
+------------------+
SELECT * FROM my_table WHERE expires - 600 < UNIX_TIMESTAMP();
+----+------------+
| id | expires |
+----+------------+
| 1 | 1442075399 |
| 2 | 1442075499 |
| 3 | 1442075599 |
| 4 | 1442075699 |
| 5 | 1442076106 |
| 6 | 1442076206 |
| 7 | 1442076306 |
+----+------------+
答案 3 :(得分:0)
您可以使用DATE_ADD
来获取未来的时间:
SELECT UNIX_TIMESTAMP() - `expires` AS `time_diff`
FROM `video_table`
WHERE expires < UNIX_TIMESTAMP(DATE_ADD(NOW(), INTERVAL 10 MINUTE))
答案 4 :(得分:0)
我不太确定我理解你要做什么,如果你创建一个给出当前时间的变量,而不是将你的查询作为一个小于或等于它应该工作的子句运行。 这是一个例子
$t=time();
SELECT * FROM video_table
WHERE column_holding_unix_time<=$t;
我希望这会有所帮助