我正在构建一个系统,其中有以下表格:
- 歌曲
- 播送
- 车站
- 跟随
- 用户
用户关注电台,这些电台通过广播播放歌曲。
我正在根据用户关注的电台为用户构建歌曲“提要”。
这是查询:
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 相同。
如您所见,我得到了重复的结果,这是我不想要的。我从上一个问题中发现,这是由于在 broadcasts.created_at 上选择了 distinct。
我的问题是:如何修改此查询,使其仅根据其 id 返回唯一歌曲,但仍按 broadcasts.created_at 排序?