其中id =多位艺术家

时间:2010-04-22 19:56:00

标签: php mysql

如果我的音乐社区内有更新(歌曲评论,艺术家更新,新歌添加,yadda yadda yadda),我的“更新”表格中会插入一个新行。该行包含艺术家ID以及其他信息(更改类型,时间和日期等)。

我的用户有一个“最喜欢的艺术家”部分,他们可以做到这一点 - 将艺术家标记为他们的最爱。因此,我想创建一个新功能,向用户显示对各种喜爱的艺术家所做的更改。

我应该如何有效地做到这一点?

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

请记住,用户可以将43,000名艺术家标记为收藏。

思想?

4 个答案:

答案 0 :(得分:5)

这取决于数据库的设置方式。如果我按照自己的方式行事,我会用这样的表格进行设置:

Table: user_favourite_artist

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

user_id和artist_id一起将是一个复合主键。每行按id指定用户(id)和他们作为收藏夹的艺术家。像这样的查询:

SELECT artist_id FROM user_favourite_artist WHERE user_id = 1

会给你artist_id的2,8和13.这是一个非常简单的查询,可以扩展到你的期望。

相反,当艺术家更新时,您将运行此查询:

SELECT user_id FROM user_favourite_artist WHERE artist_id = 2

你会得到user_id的1和2.这将告诉你哪些用户要通知。此查询也很简单,可以扩展。

答案 1 :(得分:2)

也许你可以试试这个:

SELECT * 
FROM table_updates 
WHERE artist_id IN(1, 500, 60032)  

答案 2 :(得分:1)

如果您在二级表中有标记的艺术家,我建议您使用连接。

这样的东西
SELECT *
FORM table_updates tu INNER JOIN
table_marked_by_user tmbu ON tu.artist_id = tmbu.artist_id
WHERE tmbu.user_id = $user_id

答案 3 :(得分:0)

如果您使用的是SQL Server,则可以使用嵌套的select语句:

select * from table_updates where artist_id in 
  (select artist_id from favorites_table where user_id = 10)

如果您不介意进行脏读,可以使用(nolock)加快速度。

select * from table_updates (nolock) where artist_id in 
  (select artist_id from favorites_table (nolock) where user_id = 10)
相关问题