Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 25 Май, 2012, 01:39:03

Страниц: [1]
Печать
Автор Тема: Сортировка пользователей по активности  (Прочитано 488 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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

Абырвалг,
SQL

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, это будет чудовищно тормозить. в реальной системе тебе не обойтись без заранее подготовленных "счетчиков".
Записан
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: md5, adw0rd