Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 在查询时将变量设置为true或false_Mysql_Select - Fatal编程技术网

Mysql 在查询时将变量设置为true或false

Mysql 在查询时将变量设置为true或false,mysql,select,Mysql,Select,我在这里有点进退两难,希望大家能发表意见 我有以下模式 User{id,name} Class{id} textbook{id,name,public} class_textbook{id,class_id,textbook_id} class_membership{id,user_id,class_id} 如果教科书可供每位学生下载,或仅可供参与指定课本的班级的学生下载,则tupbook.public是一个布尔字段标记 我想选择用户可以使用的每一本教科书(无论是公开的还是在用户参与的课程中分

我在这里有点进退两难,希望大家能发表意见

我有以下模式

User{id,name}
Class{id}
textbook{id,name,public}
class_textbook{id,class_id,textbook_id}
class_membership{id,user_id,class_id}
如果教科书可供每位学生下载,或仅可供参与指定课本的班级的学生下载,则tupbook.public是一个布尔字段标记

我想选择用户可以使用的每一本教科书(无论是公开的还是在用户参与的课程中分配的),但我必须知道哪本书是公开的,哪本不是,哪一个课程是用公开教科书教授的

解决这个问题的一种方法是运行两个查询 一个是让用户可以使用每一本教科书,另一个是找到公共教科书

或者我可以定义一个mysql函数来完成这项工作

SELECT 
    * 
FROM textbook 
WHERE id in (SELECT textbook_id FROM class_textbook WHERE class_id IN (SELECT class_id FROM class_membership WHERE user_id = :user_id)) 
   OR public = true
其中
:user\u id
是与相关用户关联的id号。

子查询FTW。