有这3张桌子:
用户
- 用户身份
- 名
- 等等
团体
- group_id
- 姓名
- 等等
组_用户
- group_id
- 用户身份
检查用户是否属于给定组很容易,但是是否可以检查(在单个查询中)用户是否属于多个组?
例如,具有 id 的用户是否1
属于组1, 2, 3, 4
?
更新
更具体地说,我想检查用户是否属于所有给定的组,而不是他是否属于其中之一。
有这3张桌子:
用户
团体
组_用户
检查用户是否属于给定组很容易,但是是否可以检查(在单个查询中)用户是否属于多个组?
例如,具有 id 的用户是否1
属于组1, 2, 3, 4
?
更新
更具体地说,我想检查用户是否属于所有给定的组,而不是他是否属于其中之一。
Assuming you mean to ask "whether user 1 belongs to all the groups 1, 2, 3, and 4", the answer would be:
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
You can simplify the count to count(*)
if you are sure there are no duplicate group entries for the user.
这个查询:
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
否则。