Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 其中id=多个艺术家_Php_Mysql - Fatal编程技术网

Php 其中id=多个艺术家

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

每当我的音乐社区中有更新歌曲评论、艺术家更新、添加新歌、yadda yadda yadda,我的更新表中将插入一个新行。该行包含所涉及的艺术家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最喜爱的艺术家的所有更新。