我在这里处于两难境地,并希望得到意见
我有以下架构
User{id,name}
Class{id}
textbook{id,name,public}
class_textbook{id,class_id,textbook_id}
class_membership{id,user_id,class_id}
textbook.public是一个布尔字段,用于标记每个学生是否可以下载教科书,或者只有参与该书所分配的班级的学生才能下载
我想选择每个可供用户使用的教科书(公共的或在用户参与的班级中分配),但我必须知道哪本书是公开的,哪本是公开的,哪一堂课是用公共教科书教授的
解决此问题的一种方法是运行两个查询 一个是让每个教科书都可供用户使用,一个是为了找到公共教科书
或者我可以定义一个mysql函数来为我做这个。
答案 0 :(得分:1)
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_id
是与相关用户关联的ID号。