Php 其中id=多个艺术家
每当我的音乐社区中有更新歌曲评论、艺术家更新、添加新歌、yadda yadda yadda,我的更新表中将插入一个新行。该行包含所涉及的艺术家id以及其他信息—更改类型、时间和日期等 我的用户有一个“最喜欢的艺术家”部分,他们可以在那里做这件事——将艺术家标记为他们的最爱。因此,我想创建一个新功能,向用户显示对他们喜爱的各种艺术家所做的更改 我应该如何有效地做到这一点Php 其中id=多个艺术家,php,mysql,Php,Mysql,每当我的音乐社区中有更新歌曲评论、艺术家更新、添加新歌、yadda yadda yadda,我的更新表中将插入一个新行。该行包含所涉及的艺术家id以及其他信息—更改类型、时间和日期等 我的用户有一个“最喜欢的艺术家”部分,他们可以在那里做这件事——将艺术家标记为他们的最爱。因此,我想创建一个新功能,向用户显示对他们喜爱的各种艺术家所做的更改 我应该如何有效地做到这一点 SELECT * FROM table_updates WHERE artist_id = 1 OR artist_id
SELECT *
FROM table_updates
WHERE artist_id = 1
OR artist_id = 500
OR artist_id = 60032
请记住,用户可以将我们的43000名艺术家标记为最喜爱的艺术家
想法?如果在辅助表中有标记的艺术家,我建议使用联接 差不多
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
如果在辅助表中有标记的艺术家,我建议使用联接 差不多
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
这取决于数据库的设置方式。如果我有我的方式,我会用这样一张桌子:
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指定一个用户,按id指定一个他们最喜欢的艺术家。类似这样的查询:
SELECT artist_id FROM user_favourite_artist WHERE user_id = 1
会给你艺术家id的2,8和13。这是一个非常简单的查询,可以根据您的期望进行扩展
相反,当艺术家更新时,您可以运行以下查询:
SELECT user_id FROM user_favourite_artist WHERE artist_id = 2
你会得到用户id的1和2。这将告诉您要通知哪些用户。此查询也很简单,可以扩展。这取决于数据库的设置方式。如果我有我的方式,我会用这样一张桌子:
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指定一个用户,按id指定一个他们最喜欢的艺术家。类似这样的查询:
SELECT artist_id FROM user_favourite_artist WHERE user_id = 1
会给你艺术家id的2,8和13。这是一个非常简单的查询,可以根据您的期望进行扩展
相反,当艺术家更新时,您可以运行以下查询:
SELECT user_id FROM user_favourite_artist WHERE artist_id = 2
你会得到用户id的1和2。这将告诉您要通知哪些用户。此查询也很简单,可以扩展。也许您可以尝试以下方法:
SELECT *
FROM table_updates
WHERE artist_id IN(1, 500, 60032)
也许你可以试试这个:
SELECT *
FROM table_updates
WHERE artist_id IN(1, 500, 60032)
如果您在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)
如果您在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)
注意,你说的是和,但你真正的意思是或。艺术家id不能同时是1和500。啊,是的,谢谢。。。我只是在想,忽略了你说的那个比特币,但你真的是指或。艺术家id不能同时是1和500。啊,是的,谢谢。。。我只是在想,却忽略了比蒂其实在做相反的事。用户1点击收藏夹更新区域。该页面应显示用户1最喜爱的艺术家的所有更新。实际上,我正在做相反的事情。用户1点击收藏夹更新区域。该页面应显示用户1最喜爱的艺术家的所有更新。