@fastreg0

MySQL-запрос с сортировкой по двум таблицам?

Здравствуйте! Помогите, пожалуйста, правильно написать MySQL-запрос.

Есть две таблицы.

users:
1. user_id
2. name
3. rating (int)
4. place (int)

subscribes (подписки на пользователей):
1. from_user_id (кто подписался)
2. to_user_id (на кого подписался)


Нужно написать запрос, который будет сортировать пользователей по трем параметрам:

По рейтингу (rating), чем больше рейтинг, тем выше пользователь
По количеству подписчиков, чем больше подписчиков, тем выше пользователь
По месту (place), чем выше место (т.е. чем меньше число), тем выше пользователь
Я написал следующий вариант:

SELECT subscribes.to_user_id, count(subscribes.to_user_id) as cnt, users.* 
FROM subscribes, users
WHERE users.user_id = subscribes.to_user_id
GROUP BY subscribes.to_user_id
ORDER BY users.rating DESC, cnt DESC, users.place ASC


И тут все хорошо, сортировка работает, но есть одна загвоздка. Учитываются только пользователи, у которых есть хотя бы один подписчик, остальные не показываются вообще. Я понимаю, с чем это связано — "WHERE users.user_id = subscribes.to_user_id", но как это решить мыслей нет.

Подскажите, пожалуйста, как можно изменить запрос таким образом, чтобы учитывались и пользователи без подписчиков. Спасибо.
  • Вопрос задан
  • 3700 просмотров
Решения вопроса 2
@Confl1kt
SELECT u.*, COUNT(s.*) cnt
FROM users u
LEFT JOIN subscribes s ON u.user_id = s.to_user_id
GROUP BY u.user_id
ORDER BY u.rating DESC, cnt DESC, u.place ASC


попробуй так
Ответ написан
svd71
@svd71
select u.*,
  (select count(*) from subscribes s where s.to_user_id=u.user_id) as SUBSCRIBESCOUNT
from users u
order by u.rating desc, SUBSCRIBESCOUNT desc, u.place asc
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы