2011-09-28 79 views
0

我們爲網站上的各種事物設置了時間戳。我正在尋找一種方法來獲取過去20分鐘內「在線」或已激活的用戶。我也試圖通過跨多個表中多列的最新時間戳的交集來排序它們。用於在表中查找最新活動的SQL查詢

SELECT user.userID, user.username, GREATEST(
    (SELECT MAX(notifications.noteTime) FROM notifications WHERE notifications.creatorID = user.userID), 
    challengesRead.lastRead, 
    notificationsRead.lastRead) AS realtime 
FROM user 
LEFT JOIN challengesRead ON challengesRead.userID = user.userID 
LEFT JOIN notificationsRead ON notificationsRead.userID = user.userID 
LEFT JOIN notifications ON notifications.creatorID = user.userID 
LEFT JOIN challenges ON challenges.userID = user.userID 
WHERE timestampdiff(minute, realtime, now()) < 20 
GROUP BY user.userID 
ORDER BY realtime DESC 

我的問題。

1)Timestampdiff似乎不能實時識別?然而,重新計算timestampdiff中的GREATEST()確實有效,但似乎是重複的。

2)哎呀,這隻野獸需要永遠運行,什麼是最佳的優化方式?

3)什麼是更好的方法來做到這一點?

回答

2

你可以創建一個像'latest_activity'這樣的新表,並添加觸發器來填充user_id和timestamp ...至少會給你一個地方進行查詢。

+0

Doh!有意義並解決所有上述問題。謝謝。 –