繁体   English   中英

确定用户是否在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM