有这3个表:
用户
基
groups_users
很容易检查用户是否属于某个给定的组,但是是否可以检查(在单个查询中)用户是否属于多个组?
E.g。身份1
的用户是否属于群组1, 2, 3, 4
?
更新
更具体一点,我想检查用户是否属于所有给定的群组,而不是他是否属于其中一个群组。
答案 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)
如果未返回任何记录,则该用户不在群组1
,2
,3
或4
中。
使用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
。