次のテーブルがあるシステムを構築しています。
- 歌
- ブロードキャスト
- 駅
- 従う
- ユーザー
ユーザーは、放送を通じて曲が放送されているステーションをフォローします。
私は、ユーザーがフォローしているステーションに基づいて、ユーザー向けの曲の「フィード」を作成しています。
クエリは次のとおりです。
SELECT DISTINCT ON ("broadcasts"."created_at", "songs"."id") songs.*
FROM "songs"
INNER JOIN "broadcasts" ON "songs"."shared_id" = "broadcasts"."song_id"
INNER JOIN "stations" ON "broadcasts"."station_id" = "stations"."id"
INNER JOIN "follows" ON "stations"."id" = "follows"."station_id"
WHERE "follows"."user_id" = 2
ORDER BY broadcasts.created_at desc
LIMIT 18
ここでわかるように、両方が同じ曲を放送している2つのステーションをフォローしているため、重複した曲が発生しています。
注:shared_idはidと同じです。
私の質問は、このクエリを変更して、ID(またはshared_id)に基づいて一意の曲のみを返すようにするにはどうすればよいですか?