SQL查询以查找跨表的最新活动

时间:2011-09-28 01:37:46

标签: mysql database query-optimization status

我们为整个网站的各种内容提供时间戳。我正在寻找一种方法来吸引过去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)有什么更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

你可以创建一个像'latest_activity'这样的新表,并添加触发器以填充user_id和timestamp ......这至少会给你一个查询位置。