每当我的音乐社区中有更新(歌曲评论、艺术家更新、添加的新歌、yadda yadda yadda)时,都会在我的“更新”表中插入新行。该行包含涉及的艺术家id和其他信息(更改类型、时间和日期等)。
我的用户有一个“最喜欢的艺术家”部分,在那里他们可以做到这一点——将艺术家标记为他们的最爱。因此,我想创建一个新功能,向用户显示对他们喜爱的各种艺术家所做的更改。
我应该如何有效地做到这一点?

SELECT *
FROM table_updates
WHERE artist_id = 1
OR artist_id = 500
OR artist_id = 60032

请记住,一个用户可能有43000名我们的艺术家被标记为最爱。
思想?

最佳答案

这取决于数据库的设置方式。如果我有办法的话,我会摆一张这样的桌子:

Table: user_favourite_artist

user_id  |  artist_id
---------------------
1        |  2
1        |  8
1        |  13
2        |  2
3        |  6
6        |  20
6        |  1
6        |  3

用户id和艺术家id一起将是一个复合主键。每一行按id指定一个用户和一个他们最喜欢的艺术家。查询如下:
SELECT artist_id FROM user_favourite_artist WHERE user_id = 1

会给你艺术家的身份证2,8,和13。这是一个非常简单的查询,可以根据您的期望进行扩展。
相反,当更新艺术家时,您将运行以下查询:
SELECT user_id FROM user_favourite_artist WHERE artist_id = 2

你会得到用户id的1和2。这将告诉您要通知哪些用户。这个查询也很简单,而且可以扩展。

10-08 11:11