Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询筛选器权限_Mysql_Sql_Database_Performance - Fatal编程技术网

Mysql 查询筛选器权限

Mysql 查询筛选器权限,mysql,sql,database,performance,Mysql,Sql,Database,Performance,我需要一些关于MySQL查询的帮助。 学生可以从他所属的团体或个人获得借书许可。这些书也与团体有关 我想得到所有的书,以一种更好的方式,一个学生可以得到根据他的权限或组权限。另外,如何从一个或多个groupID中筛选 请注意,如果一本书不在权限表中,则表示它对每个人都可用 下面是数据库模式的示例 --table book-- bookID name --table group-- groupdID name -- table student -- studID

我需要一些关于MySQL查询的帮助。 学生可以从他所属的团体或个人获得借书许可。这些书也与团体有关

我想得到所有的书,以一种更好的方式,一个学生可以得到根据他的权限或组权限。另外,如何从一个或多个groupID中筛选

请注意,如果一本书不在权限表中,则表示它对每个人都可用

下面是数据库模式的示例

--table book--
bookID     name      

--table group--
groupdID     name

-- table student --
studID    name

-- table group_book --
bookID     groupID

-- table student_group--
groupdID     studID

-- table student_book_permission --
bookID     studID

-- table group_book_permission --
bookID     groupID
谢谢你的帮助和时间

select s.studid, s.name, b.bookid, b.name
from student s
left join student_book_permission sbp on s.studid=sbp.studid
left join book b on sbp.bookid=b.bookid
union distinct
select s.studid, s.name, b.bookid, b.name
where s.studid=?
from student s
left join student_group sg on s.studid=sg.studid
left join group_book_permission gbp on sg.groupid=gbp.groupid
left join book b on gbp.bookid=b.bookid
where s.studid=?

学生可以访问的书籍列表由两个查询联合生成。顶部的查询获取学生有权单独阅读的书籍列表。底部查询根据组权限列出图书。Union distinct确保一本书在列表中只显示一次。

group\u book和group\u book\u权限表之间的区别是什么?前者对权限有何影响?它没有,只是以一种信息性的方式,以便按组对其进行过滤。很多,但我还需要获取所有权限都为空的书籍(意味着每个人都有权访问它)添加另一个select,然后使用union选择具有空权限的书籍(组合为的左联接为空)