我正在编写一个用户组系统。这是我的数据库结构:
users(id username group_id)
-------- -------- --------
1 gesting 1
groups(id title)
--------- -----
1 Admin
permissions(id value)
-------------- --------------
1 testpermission
user_group_properties
group_id user_id permission_id data
-------- ------- ------------- -------------------------
1 NULL 1 some further information
NULL 1 1 some further information
每个用户都在一个组中,每个组在user_group_properties-table中都有一个条目。现在,我想从权限表开始,并想加入user_group_properties表。给出了用户ID和组ID。如果用户在user_group_properties表中有自己的行(至少一个条目“ where user_id = {user_id}”),那么我要获得此行,否则我要获得组的行。
在示例数据中,您可以看到一个ID为1的权限。在user_group_properties-table中,有两个条目的权限为id_id1。在第一个条目中,user_id为null,而group_id为非,在第二个条目中,group_id为null,而user_id为not。 。如果我现在正在执行Join-Query,MySQL-Server将给我第一行,即user-id为null的行,但是如果存在这样的行,我需要user-id不为null的行。如果现在存在user-id为null的行,则需要该组的行。
我希望你能帮助我。
非常感谢!
如果我理解正确,则您希望优先访问user_group_properties
。。。如果用户存在,则首先,然后是任何组。这是一种方法:
select ugp.*
from user_group_properties ugp
where ugp.user_id = {user_id}
union all
select ugp.*
from user_group_properties ugp join
users u
on ugp.group_id = u.group_id and u.id = {user_id}
where not exists (select 1 from user_group_properties ugp2 where ugp2.user_id = {user_id}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句