1

次のテーブルがあるシステムを構築しています。

  • ブロードキャスト
  • 従う
  • ユーザー

ユーザーは、放送を通じて曲が放送されているステーションをフォローします。

私は、ユーザーがフォローしているステーションに基づいて、ユーザー向けの曲の「フィード」を作成しています。

クエリは次のとおりです。

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つのステーションをフォローしているため、重複した曲が発生しています。

sqlが結合時に明確に機能しない

注:shared_idはidと同じです。

私の質問は、このクエリを変更して、ID(またはshared_id)に基づいて一意の曲のみを返すようにするにはどうすればよいですか?

4

1 に答える 1

3

"broadcasts"."created_at"一意でない値を返しているため、述語から削除します。DISTINCTしたがって、重複しsongsます。この情報を使用して並べ替える必要がある場合は、新しい質問を作成してください。

于 2012-07-07T00:49:09.107 に答える