[英]Best way to determine and store Pay Periods for a time clock in PHP and MySQL
[英]Best way to determine if a user went offline in MySQL
因此,我的脚本当前会强制用户每10分钟发送一次“ ping”。 这会将一条带有用户ID和当前时间戳的记录插入MySQL。
我要实现的目标是查看最近是否有任何用户下线。 从理论上讲,这将选择一个最近在线的用户(20分钟前),然后检查过去11分钟内是否没有执行ping操作,除非我似乎不知道如何操作。 这是我到目前为止的内容:
SELECT * FROM status WHERE time > (CURTIME() - 1200) AND time < (CURTIME() - 660)
我必须补充一点,我与PHP结合使用,但这并不重要。
任何帮助表示赞赏。
有很多方法可以做到这一点。 假设您有一个名为id
的主键,这是一个:
SELECT *
FROM status
LEFT JOIN (
SELECT id
FROM status
WHERE time > (CURTIME() - 660) // was on within last 5 minutes
) sub ON
sub.id = status.id
WHERE
time > (CURTIME() - 1200) // was on within last 20 minutes
AND sub.id IS NULL; // was on within last 20, but not last 5
我会尝试这样的事情:
SELECT TIMEDIFF(CURTIME(), MAX(s.time)) AS duration, s.user
FROM status s
GROUP BY s.user
HAVING duration > 660 AND duration < 1200;
用户名是否未存储在状态表中。 您应该在状态和用户之间执行JOIN。
如果您还想检查特定范围的持续时间,则可以使用BETWEEN语句。
编辑:感谢Madbreaks关于“最近”的约束。 您可以添加AND持续时间<xxxx以不检索旧的持续时间,而在结果集中仅保留“最近”状态。
在之间使用:
SELECT *
FROM `status`
WHERE (`time` BETWEEN (CURTIME() - 660) AND (CURTIME() - 1200))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.