检查用户是否属于多个组

时间:2013-08-01 07:56:56

标签: mysql

有这3个表:

用户

  • USER_ID
  • 如first_name

  • GROUP_ID
  • 姓名

groups_users

  • GROUP_ID
  • USER_ID

很容易检查用户是否属于某个给定的组,但是是否可以检查(在单个查询中)用户是否属于多个组?

E.g。身份1的用户是否属于群组1, 2, 3, 4

更新

更具体一点,我想检查用户是否属于所有给定的群组,而不是他是否属于其中一个群组。

2 个答案:

答案 0 :(得分:2)

假设您要问“用户1是否属于所有组1,2,3和4”,答案是:

select case when (select count(distinct group_id)
                    from group_users
                   where user_id = 1
                     and group_id in (1, 2, 3, 4)
                 ) = 4 then 'member in all four groups'
             else 'not member in all four groups'
        end

如果您确定用户没有重复的组条目,您可以将计数简化为count(*)

答案 1 :(得分:1)

此查询:

SELECT group_id FROM groups_users WHERE user_id=1

为您提供用户1所属的所有群组。

如果您要检查多个组,则可以执行以下操作:

SELECT group_id FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)

如果未返回任何记录,则该用户不在群组1234中。

使用COUNT(group_id)COUNT(DISTINCT group_id)了解用户所属的群组数量。如果它等于所请求的组的数量,则它属于所有:

SELECT COUNT(DISTINCT group_id)=4 FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)

如果用户属于所有群组,则会返回1,否则为0