私は、「Songs」、「Songs_Tags」(タグ付きの曲)、「Songs_Votes」(ブーリアンのような/関連しない曲)のテーブルを持っています。GROUP BY後LEFT JOIN?
タグのGROUP_CONCAT()と好きな数(真)と嫌い(偽)の数を取得する必要があります。
私のクエリはそのようなものです:
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
問題は、私はCOUNT()を実行するときに、それはより多くを返し、ソングが1個の以上のタグを持っているとき、それはもっとそして一度返されるということです結果。
私が考えることができる最良の解決策は、GROUP BYの後に最後のLEFT JOINを実行することが可能な場合です(今では各曲に1つのエントリしか存在しません)。それから、別のGROUP BY m.idが必要です。
これを達成する方法はありますか?サブクエリを使用する必要がありますか?
を使用して
編集追加ソリューションは、あなたの投票表にはPKを持っていますか? –
はい、(id_song、id_vote) – Lem0n