Как правильно составить SQL запрос с SUM информации из нескольких JOIN?

Есть три таблицы. В одной хранится информация о пользователях, в двух других - рейтинги топиков и комментов. Нужно вывести топ 10 пользователей, с наибольшей суммой рейтинга за комменты и посты за прошедную неделю. Пробую так:
SELECT user.user_id, SUM(topic.topic_rating + comment.comment_rating) as sum FROM tb_user as user
JOIN tb_topic as topic ON user.user_id = topic.user_id AND topic.topic_date_add > NOW() - INTERVAL 7 DAY
JOIN tb_comment as comment ON user.user_id = comment.user_id AND comment.comment_date > NOW() - INTERVAL 7 DAY
GROUP BY user.user_id LIMIT 10


Но в итоге получается просто неоправданно гиганская сумма (от нескольких тысяч). Если убрать один из JOIN, сумма получается правдивой. Я так понимаю, что проблема в слишком частых повторениях из-за второго JOIN'a. Можно ли как-нибудь составить запрос таким образом, чтобы обойтись одним SELECT'ом, и получить истинное значение суммы?
  • Вопрос задан
  • 2652 просмотра
Решения вопроса 1
@Power
Мне приходит в голову только join на вложенные select:
select user.user_id, (coalesce(topics.sum, 0) + coalesce(comments.sum, 0)) as rating from tb_user user
left join (select user_id, sum(topic_rating) as sum from tb_topic where topic_date_add > NOW() - INTERVAL 7 DAY group by user_id) topics on topics.user_id = user.user_id
left join (select user_id, sum(comment_rating) as sum from tb_comment where comment_date > NOW() - INTERVAL 7 DAY group by user_id) comments on comments.user_id = user.user_id
order by rating desc limit 10;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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