Несколько объединений для сбора пользовательских рейтингов?

У меня есть таблица под названием кавычки:

id date       content
80 2012-06-03 This is the first quote.
81 2012-06-05 Lorem Ipsum.

И таблица под названием рейтинги:

rid uid qid rating
1   4   80  -1
2   4   81  1

Поле uid относится к зарегистрированному пользователю, который сделал эту оценку. Веб-сайт котировок доступен только зарегистрированным пользователям, и я хочу иметь возможность отображать котировки для текущего пользователя, включая информацию о текущем рейтинге котировок, независимо от того, оценили ли они цитату и, если да, то, что они оценили это так же как. Рейтинги могут быть либо -1, либо 1. Котировки не связаны с пользователем, который их отправил.

Если я хочу получить только одну цитату, я выполняю этот запрос (например, цитата 80 и пользователь 4):

SELECT
  q.id AS qid, q.content, q.date,
  COALESCE(SUM(r.rating), 0) AS rating,
    (SELECT COALESCE(rating, 0) FROM ratings WHERE qid = 80 AND uid = 4 LIMIT 1)
      AS user_rated
  FROM quotes q
  LEFT JOIN ratings r ON q.id = r.qid
  WHERE q.id = 80
  GROUP BY q.id

Как бы я изменил это, чтобы отображать более одной цитаты (то есть не просто цитату с идентификатором 80), но сохранить информацию о user_rated и рейтинге?

Большое спасибо!

1 ответ

Решение
SELECT
  q.id AS qid,
  q.content,
  q.date,
  COALESCE(SUM(r.rating), 0) AS rating,
  COALESCE(SUM(IF(r.uid = 4, r.rating, NULL)), 0) AS user_rated
FROM quotes q
LEFT JOIN ratings r ON q.id = r.qid
GROUP BY q.id
Другие вопросы по тегам