0

私はここで少しジレンマにあり、意見をいただければ幸いです

私は次のスキーマを持っています

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は、教科書がすべての学生によってダウンロード可能であるか、または本が割り当てられているクラスに参加している学生のみがダウンロードできるかどうかを示すブールフィールドです。

ユーザーが利用できるすべての教科書(公開されているか、ユーザーが参加するクラスに割り当てられている)を選択したいのですが、どの本が公開されているか、公開されていないか、どのクラスが公開教科書で教えられているかを知る必要があります。

これを解決する1つの方法は、2つのクエリを実行することです。1つはユーザーが利用できるすべての教科書を取得し、もう1つは公開されている教科書を検索します。

または、これを行うために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

ここ:user_idで、は問題のユーザーに関連付けられたID番号です。

于 2012-10-23T00:44:26.633 に答える