【发布时间】:2020-04-12 11:15:25
【问题描述】:
我的数据库保存用户、歌曲和播放列表,并允许用户保存他们喜爱的歌曲。我想帮助用户找到与他们保存的歌曲最相似的播放列表。假设数据看起来像这样
users_saved_songs
user_id song_id
1 1
1 2
1 3
1 4
2 1
2 3
2 5
2 7
3 2
3 4
3 6
3 8
3 10
playlists_songs
playlist_id song_id
1 1
1 5
1 9
1 13
2 2
2 6
2 10
2 14
3 1
3 2
3 4
3 7
3 10
3 13
3 15
我想找到与用户保存的歌曲有最多共同点的播放列表。所以给定用户 ID 1,他们保存的歌曲是 [1,2,3,4]。我想根据播放列表共有多少首歌曲来订购播放列表:播放列表 1 有 1 首歌曲,播放列表 2 有 1 首歌曲,播放列表 3 有 3 首歌曲。什么是查询(我正在使用 Postgres),这将使我能够做到这个?请记住,用户可能保存了 100 首歌曲,并且有 1000 首播放列表中的 10 首,其中可能包含 1-500 首歌曲。无论如何要编写一个高性能查询来获取此信息?还是最好将“匹配分数”缓存在单独的表中(user_id、playlist_id、match_count)?
【问题讨论】:
标签: sql postgresql