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

时间:2012-10-23 00:36:16

标签: 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}

textbook.public是一个布尔字段,用于标记每个学生是否可以下载教科书,或者只有参与该书所分配的班级的学生才能下载

我想选择每个可供用户使用的教科书(公共的或在用户参与的班级中分配),但我必须知道哪本书是公开的,哪本是公开的,哪一堂课是用公共教科书教授的

解决此问题的一种方法是运行两个查询  一个是让每个教科书都可供用户使用,一个是为了找到公共教科书

或者我可以定义一个mysql函数来为我做这个。

1 个答案:

答案 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号。