Несколько объединений для сбора пользовательских рейтингов?
У меня есть таблица под названием кавычки:
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