【发布时间】:2012-03-12 12:54:31
【问题描述】:
我有一个“Songs”表,“Songs_Tags”(将歌曲与标签相关联)和“Songs_Votes”(将歌曲与布尔喜欢/不喜欢相关联)。
我需要检索带有 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 之后执行最后一个 LEFT JOIN(所以现在每首歌曲只有一个条目)。然后我需要另一个 GROUP BY m.id。
有没有办法做到这一点?我需要使用子查询吗?
【问题讨论】:
-
你的投票表有PK吗?
标签: mysql join group-by group-concat