所以我有一个会话表,其实质上有以下cols:
session_id | user_agent | last_activity(在unix时间戳中)
当我尝试使用此查询显示5分钟前创建的会话中的session_id和last_activity时
SELECT session_id, from_unixtime('last_activity' / 1000, '%Y-%m-%d %H:%i') AS session_time
FROM gw_sessions
WHERE last_activity >= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000
它不起作用。
所以我试图通过使用以下查询显示所有会话(session_id和last_activity)来简化我的查询
SELECT session_id, from_unixtime('last_activity' / 1000, '%Y-%m-%d %H:%i') AS session_time
FROM gw_sessions
结果显示如下
session_id | session_time
abcdefg... --> 1970-01-01 07:00 (epoch)
为什么它没有正确转换值?如何将两个日期(now())与以unix格式存储的日期正确比较?
答案 0 :(得分:1)
您的查询正在返回正确的信息。看看:
SELECT (1367481523) a, (unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000) b;
+------------+---------------+
| a | b |
+------------+---------------+
| 1367481523 | 1367483902000 |
+------------+---------------+
正如您所说,您的last_activity是'a'值。它比'b'小。在您的查询中,您希望所有记录都带有'a'> ='b'(WHERE last_activity> = unix_timestamp ...)。
到目前为止,您的查询是正确的。也许你的逻辑是需要改变的。
[编辑]
然后,再次检查您要比较的值带来的返回日期。
mysql> SELECT
from_unixtime(1367481523 / 1000, '%Y-%m-%d %H:%i') a,
from_unixtime(1367483902000 / 1000, '%Y-%m-%d %H:%i') b;
+------------------+------------------+
| a | b |
+------------------+------------------+
| 1970-01-17 05:51 | 2013-05-02 18:38 |
+------------------+------------------+
1 row in set (0.00 sec)
- )