0

我在这里有点进退两难,希望能提出意见

我有以下架构

User{id,name}
Class{id}
textbook{id,name,public}
class_textbook{id,class_id,textbook_id}
class_membership{id,user_id,class_id}

教科书.public 是一个布尔字段标记,如果教科书可供每个学生下载,或者只有参与分配该书的班级的学生可以下载

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

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

或者我可以定义一个 mysql 函数来为我执行此操作。

4

1 回答 1

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

where :user_id is the id number associated with the user in question.

于 2012-10-23T00:44:26.633 回答