Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
列出与MySQL在同一个表中具有相同ID的行_Mysql_Sql - Fatal编程技术网

列出与MySQL在同一个表中具有相同ID的行

列出与MySQL在同一个表中具有相同ID的行,mysql,sql,Mysql,Sql,我正在建立一个活动网站,我想在用户的个人资料中显示我将与其他用户一起进行的常见活动 因此,我有一个如下表: 每次用户单击“活动”页面上的“加入”时,都会在此表中添加一个新行,其中包含: 加入的用户\u id 参加的活动(活动) 因此,在每个用户的个人资料中,我想列出我们有共同点的不同活动 如果用户的ID是例如1和10,那么我可以列出他们通过此查询进行的活动: SELECT * FROM `activity_user` WHERE user_id IN(1, 10) 但是,如何更新此查询以

我正在建立一个活动网站,我想在用户的个人资料中显示我将与其他用户一起进行的常见活动

因此,我有一个如下表:

每次用户单击“活动”页面上的“加入”时,都会在此表中添加一个新行,其中包含:

  • 加入的用户\u id
  • 参加的活动(活动)
因此,在每个用户的个人资料中,我想列出我们有共同点的不同活动

如果用户的ID是例如1和10,那么我可以列出他们通过此查询进行的活动:

SELECT * FROM `activity_user` WHERE user_id IN(1, 10)

但是,如何更新此查询以仅返回它们共同拥有的活动ID?

如果用户数量仅限于2,则使用intersect子句非常简单-

SELECT activity_id
FROM `activity_user`
WHERE user_id = 1
INTERSECT
SELECT activity_id
FROM `activity_user`
WHERE user_id = 10

对于两个用户,您可以根据活动\u id上的同一个表加入两个SELECT

SELECT a.activity_id
FROM test a
JOIN (SELECT activity_idFROM test WHERE user_id = 10) b ON a.activity_id = b.activity_id
WHERE a.user_id = 1

这是一个具有相同表的简单联接:

SELECT a1.activity_id
FROM activity_user a1
JOIN activity_user a2 ON a2.activity_id = a1.activity_id
WHERE a1.user_id = 1
  AND a2.user_id = 10
另一种方法是
按活动\u id进行分组,通过计算每组的行数,仅返回两个用户都拥有的活动:

SELECT activity_id
FROM activity_user
WHERE user_id IN(1, 10)
GROUP BY activity_id
HAVING COUNT(*) = 2