我正在构建一个系统,其中包含以下表格:
用户关注通过广播在其上播放歌曲的电台。
我正在为用户根据他们关注的电台制作歌曲的“馈送”。
以下是查询:
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
正如你在这里看到的那样,我正在收到正在发生的重复歌曲,因为我正在关注两个同时播放同一首歌的电台:
注意:shared_id与id相同。
我的问题是:如何修改此查询,以便根据其ID(或shared_id)返回唯一的歌曲?
答案 0 :(得分:3)
从"broadcasts"."created_at"
谓词中删除DISTINCT
,因为它返回非唯一值,因此重复songs
。如果您需要使用此信息进行排序,请创建一个新问题。