列出与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
- 参加的活动(活动)
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