2015-04-30 4 views
0

Я использую таблицу Votes для размещения симпозиумов/не понравилось для сообщений пользователя (Posts). Теперь я хочу выбрать количество сообщений, которые нравятся и не нравятся. В настоящее время запрос выглядит следующим образом:MySQL выбирает разные значения как разные столбцы в одной таблице?

SELECT p.*, count(v1.id) AS Likes, count(v2.id) AS Dislikes FROM Posts p 
LEFT JOIN Votes v1 ON v1.post_id=p.id AND v1.status=1 
LEFT JOIN Votes v2 ON v2.post_id=p.id AND v2.status=2 
WHERE p.id=123 

Есть ли лучший подход, чтобы эти два случая можно было объединить в один?

ответ

1

Вы можете использовать CASE и SUM в одном JOIN

Что-то вроде

SELECT p.*, 
    SUM(CASE WHEN v1.status=1 THEN 1 ELSE 0 END) AS Likes, 
    SUM(CASE WHEN v1.status=2 THEN 1 ELSE 0 END) AS Dislikes FROM Posts p 
LEFT JOIN Votes v1 ON v1.post_id=p.id 
WHERE p.id=123 
0

Вы можете использовать условную сумму для этого

select 
SELECT p.*, 
sum(v.status=1) as `Likes`, 
sum(v.status=2) as `Dislikes` 
from Posts p 
LEFT JOIN Votes v ON v.post_id=p.id 
where p.id=123 
Смежные вопросы