У меня есть таблица «Песни», «Songs_Tags» (связанные песни с тегами) и «Songs_Votes» (связанные песни с булевым как/неприязнь).LEFT JOIN после GROUP BY?
Мне нужно получить песни с помощью GROUP_CONCAT() его тегов, а также количество понравившихся (true) и антипатий (false).
Мой запрос что-то вроде этого:
SELECT
s.*,
GROUP_CONCAT(st.id_tag) AS tags_ids,
COUNT(CASE WHEN v.vote=1 THEN 1 ELSE NULL END) as votesUp,
COUNT(CASE WHEN v.vote=0 THEN 1 ELSE NULL END) as votesDown,
FROM Songs s
LEFT JOIN Songs_Tags st ON (s.id = st.id_song)
LEFT JOIN Votes v ON (s.id=v.id_song)
GROUP BY s.id
ORDER BY id DESC
Проблема заключается в том, что, когда песня имеет более чем 1 тег, он получает возвращается более чем один раз, так что, когда я делаю COUNT(), она возвращает более Результаты.
Лучшее решение, которое я мог бы подумать, это то, что можно было бы сделать последнее ЛЕВОЕ ПРИСОЕДИНЕНИЕ после GROUP BY (так что теперь будет только одна запись для каждой песни). Тогда мне понадобится другая GROUP BY m.id.
Есть ли способ сделать это? Нужно ли использовать подзапрос?
ли ваша таблица голосов на ПК? –
Да, (id_song, id_vote) – Lem0n