簡體   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