2011-09-28 2 views
0

У нас есть временные метки для разных вещей по всему сайту. Я ищу способ получить пользователей, которые являются «онлайн» или активны за последние 20 минут. Im также пытается сортировать их по пересечению последней временной метки в нескольких столбцах в нескольких таблицах.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, похоже, не распознает в реальном времени? Однако пересчет GREATEST() в timestampdiff действительно работает, но кажется повторяющимся.

2) Yikes, этот зверь берет навсегда бежать, что лучший способ оптимизировать?

3) Что является лучшим способом сделать это?

ответ

2

вы можете создать новую таблицу, такую ​​как «latest_activity», и добавить триггеры для заполнения с помощью user_id и timestamp ..., которые по крайней мере предоставят вам одно место для запроса.

+0

Doh! Делает смысл и решает все вышеупомянутые проблемы. Благодарю. –

Смежные вопросы