|
byvlad ↓
|
 |
|
19 Июль, 2011, 03:29:20
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 12 Сила слова: 0
|
Вообщем нужно составить запрос сортировки пользователей по активности, что-то типа этого только нормальный:
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
помогите пожалуйста)
|
|
|
|
|
Записан
|
|
|
|
|
byvlad ↓
|
 |
|
19 Июль, 2011, 10:23:24 , спустя 6 часов 54 минуты 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 12 Сила слова: 0
|
Вообщем я наверное неверно объяснил, есть 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:43 , спустя 11 минут 19 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
ну как вариант - добавить аггрегирующие колонки в основную таблицу с пользователями, где это все будет заранее подсчитано
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
byvlad ↓
|
 |
|
19 Июль, 2011, 11:16:51 , спустя 42 минуты 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 12 Сила слова: 0
|
был вариант, но хотелось бы обойти это...
|
|
|
|
|
Записан
|
|
|
|
|
Troy ↓
|
 |
|
19 Июль, 2011, 11:54:17 , спустя 37 минут 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
был вариант, но хотелось бы обойти это...
А зря, самый быстрый и простой вариант.
|
|
|
|
|
Записан
|
|
|
|
|
byvlad ↓
|
 |
|
19 Июль, 2011, 12:57:50 , спустя 1 час 3 минуты 33 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 12 Сила слова: 0
|
Дали мне рабочий запрос, всем спасибо. =)
Troy, ну я ставлю кэширование, так что думаю 0.01 не сыграют роли, а при добавлении/удалении будут лишние запросы + в таблице лишнее поле.
|
|
|
|
|
Записан
|
|
|
|
|
Абырвалг ↓
|
 |
|
19 Июль, 2011, 01:00:23 , спустя 2 минуты 33 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
так и что там в итоге получилось-то?
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Troy ↓
|
 |
|
19 Июль, 2011, 02:54:24 , спустя 1 час 54 минуты 1 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
byvlad, ну кэширование ладно, но все же данные читают намного чаще, чем записывают.
|
|
|
|
|
Записан
|
|
|
|
|
byvlad ↓
|
 |
|
20 Июль, 2011, 01:19:26 , спустя 10 часов 25 минут 2 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 12 Сила слова: 0
|
Абырвалг,
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
|
|
|
|
|
Записан
|
|
|
|
|
artoodetoo ↓
|
 |
|
20 Июль, 2011, 06:59:54 , спустя 5 часов 40 минут 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3805 Сила слова: 3.26
|
byvlad, это будет чудовищно тормозить. в реальной системе тебе не обойтись без заранее подготовленных "счетчиков".
|
|
|
|
|
Записан
|
|
|
|
|