我会定期更新每个用户在某些操作上的最后一项活动,以便以后能够吸引在线用户。但是,当我运行下面的查询时,它总是得到一个结果,好像用户在线:
SELECT * FROM info WHERE last_activity + INTERVAL 30 SECOND > NOW() and for_whom = '1461' and is_deleted=0
我尝试将last_activity列值更改为较低的时间,但始终返回该行。 ?
答案 0 :(得分:1)
确保您的Web服务器和数据库服务器具有相同的系统时间。
尝试SELECT NOW()
检查数据库服务器时间。
答案 1 :(得分:1)
请确保您使用MySQL NOW()
更新上一个活动,而不是来自其他来源的明确日期时间。
此外,如果您在info (for_whom, is_deleted, last_activity)
上创建索引并稍微重写查询,您的查询会快得多:
SELECT *
FROM info
WHERE for_whom = 1461
AND is_deleted = 0
AND last_activity > NOW() - INTERVAL 30 SECOND
答案 2 :(得分:0)
您应该检查last_activity
日期时间的 UTC部分。你可能会在那里找到惊喜。
此处描述的其他措施可能有所帮助(例如日期时间同步)