Форум → Разработка → Базы данных → Сортировка пользователей по активности
Сортировка пользователей по активности
-
Вообщем нужно составить запрос сортировки пользователей по активности, что-то типа этого только нормальный:
SELECT * FROM `users` ORDER BY (SELECT COUNT(*) FROM `mems` WHERE `id_user` = что-то),(SELECT COUNT(*) FROM `mems_comments` WHERE `id_user` = что-то),(SELECT COUNT(*) FROM `mems_likes` WHERE `id_user` = чтото) DESC LIMIT 10
помогите пожалуйста) -
19 июля 2011 г. 10:23, спустя 6 часов 54 минуты 4 секунды
Вообщем я наверное неверно объяснил, есть 4 таблицы:
mems:
структура:
id
id_user
и ещё ненужные поля
mems_comments:
структура:
id
id_user
id_mems
и ещё ненужные поля
mems_likes:
структура:
id
id_user
id_mems
и ещё ненужные поля.
Нужно составить ТОП-10 самых активных пользователей исходя из количества записей в этих таблицах с приоритетом таблиц mems,mems_comments,mems_likes.
Таблица пользователей:
users:
id
login
и ещё ненужные поля. -
19 июля 2011 г. 10:34, спустя 11 минут 19 секунд
ну как вариант - добавить аггрегирующие колонки в основную таблицу с пользователями, где это все будет заранее подсчитано -
-
19 июля 2011 г. 11:54, спустя 37 минут 26 секунд
был вариант, но хотелось бы обойти это…
А зря, самый быстрый и простой вариант. -
19 июля 2011 г. 12:57, спустя 1 час 3 минуты 33 секунды
Дали мне рабочий запрос, всем спасибо. =)
Troy, ну я ставлю кэширование, так что думаю 0.01 не сыграют роли, а при добавлении/удалении будут лишние запросы + в таблице лишнее поле. -
-
19 июля 2011 г. 14:54, спустя 1 час 54 минуты 1 секунду
byvlad, ну кэширование ладно, но все же данные читают намного чаще, чем записывают. -
20 июля 2011 г. 1:19, спустя 10 часов 25 минут 2 секунды
Абырвалг,
SELECT `users`.*,
(
(SELECT COUNT(1) FROM `mems` WHERE `id_user` = `users`.`id`) +
(SELECT COUNT(1) FROM `mems_comments` WHERE `id_user` = `users`.`id`) +
(SELECT COUNT(1) FROM `mems_likes` WHERE `id_user` = `users`.`id`)
) AS `cnt`
FROM `users`
ORDER BY `cnt` DESC LIMIT 10 -
20 июля 2011 г. 6:59, спустя 5 часов 40 минут 28 секунд
byvlad, это будет чудовищно тормозить. в реальной системе тебе не обойтись без заранее подготовленных "счетчиков".ιιlllιlllι унц-унц
Пожалуйста, авторизуйтесь, чтобы написать комментарий!