Форум → Разработка → Базы данных → Сортировка пользователей по активности
Сортировка пользователей по активности
-
Вообщем нужно составить запрос сортировки пользователей по активности, что-то типа этого только нормальный:
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, 2: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ι унц-унц
Пожалуйста, авторизуйтесь, чтобы написать комментарий!