我有一个表(会话),它有 2 列,我必须用于此查询。Session_Active(这是一个 tinyInt)和 Last_active(这是一个日期时间)。
我想创建一个查询,计算现在和所有表的 'Last_active' 之间的时间差,其中 'Session_Active' 为真,如果它大于 5 分钟,它应该更改 'Session_Active'。
这是我所拥有的部分:
SELECT timediff(now(), `Last_Active`) from sessions WHERE `Session_Active` = true;
Run Code Online (Sandbox Code Playgroud)
我完全不知道如何检查差异是否大于 5 分钟,我也不知道在哪里/如何放置UPDATE Session_Active = false(如果差异是 5 分钟或更长时间)
提前致谢!(:
您可以使用以下解决方案DATE_SUB:
UPDATE sessions SET `Session_Active` = 0
WHERE `Last_Active` <= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
AND `Session_Active` = 1
Run Code Online (Sandbox Code Playgroud)
您想使用时间戳解决方案吗?
您可以使用TIMESTAMPDIFF:
UPDATE sessions SET `Session_Active` = 0
WHERE TIMESTAMPDIFF(MINUTE, `Last_Active`, NOW()) >= 5
AND `Session_Active` = 1
Run Code Online (Sandbox Code Playgroud)
注意:你应该小心使用
TIMESTAMP!为什么不应该使用的一些信息TIMESTAMP:https : //stackoverflow.com/a/35469149/3840840。在这个答案中有对这篇文章的参考,描述了DATETIME,TIMESTAMP和的性能INT。该
TIMESTAMP解决方案只能工作到 2038 年。这将是由2038 年问题引起的。对这个问题以及 2038 年发生的事情的一个很好的解释:https : //stackoverflow.com/a/2012620/3840840