我们为整个网站的各种内容提供时间戳。我正在寻找一种方法来吸引过去20分钟内“在线”或活跃的用户。我还试图通过跨多个表的多列中的最新时间戳的交集对它们进行排序。
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)Yikes,这只野兽需要永远运行,最好的方法是什么?3)有什么更好的方法可以做到这一点?
答案 0 :(得分:2)
你可以创建一个像'latest_activity'这样的新表,并添加触发器以填充user_id和timestamp ......这至少会给你一个查询位置。