mysql如何根据用户组获取文档?

问题描述 投票:0回答:1

我有 5 个表 users、groups user_groups、documents 和 document_groups 表。我想获取属于用户及其组的所有文档

用户表

id 名字 电子邮件
1 约翰 [电子邮件受保护]
2 马丁 [电子邮件受保护]
3 凯恩 [电子邮件受保护]

组表

id 群组名称
1 账户组
2 IT组

用户组表

用户 ID 组_id
1 1
2 1
3 2

John 和 martin 属于 Accounts Group,Kane 属于 IT GROUP

文件台

id 文档名称 共享类型
1 政策文件 全部
2 个人文件

现在第一个文档将对数据库中的所有用户可见,但第二个文档应该可供某些组访问,可能是 1 个或多个然后 1。

现在我们有最后一张桌子了

文档组

id 组_id 文档_id
1 1 2

现在第二个文档应该只能由帐户组(组 ID :1)访问,并且帐户组中只有 2 个用户 John 和 Martin

我已经尝试过下面的代码

SELECT *
from documents 
lEFT Join document_groups
  on document_groups.document_id = documents.id 
JOIN user_groups
  on document_groups.group_id = user_groups.group_id 
where documents.share_type = "all" or user_groups.user_id = 1

如果我以用户 John 身份登录,我的最终输出

文档_id 文档名称
1 政策文件
2 个人文件

如果我以用户 Kane 身份登录,我的最终输出

文档_id 文档名称
1 政策文件
sql mysql
1个回答
0
投票

看起来您需要一个

EXISTS
,来检查该文档和用户是否存在匹配的
document_groups
user_groups

select d.*
from documents d
where (
  d.share_type = 'all'
  or exists (select 1
    from document_groups dg
    join user_groups ug on dg.group_id = ug.group_id 
    where ug.user_id = @user_id
      and dg.document_id = d.id 
  )
);
© www.soinside.com 2019 - 2024. All rights reserved.