2015-10-06 2 views
2

Мне нужна помощь для запроса MySQL. Студент может получить разрешения на заимствование книги из одной из принадлежащих ему групп или с индивидуального разрешения. Также книги связаны с группами.Запрос для разрешения фильтра

Я хотел бы получить все книги в совершенном виде, которые студент может получить в соответствии с его разрешениями или группами. Также как я могу отфильтровать один или несколько идентификаторов groupID?

Обратите внимание, что если книга не в таблице разрешений, это означает, что он доступен для всех

Вот пример схемы базы данных.

--table book-- 
bookID  name  

--table group-- 
groupdID  name 

-- table student -- 
studID name 

-- table group_book -- 
bookID  groupID 

-- table student_group-- 
groupdID  studID 

-- table student_book_permission -- 
bookID  studID 

-- table group_book_permission -- 
bookID  groupID 

Спасибо за YOUT помощь и ваше время

+0

В чем разница между таблицами group_book и group_book_permission? Как первое влияет на разрешения? – Shadow

+0

Это не так, просто информативно, чтобы отфильтровать их по группам. – blop

ответ

0
select s.studid, s.name, b.bookid, b.name 
from student s 
left join student_book_permission sbp on s.studid=sbp.studid 
left join book b on sbp.bookid=b.bookid 
union distinct 
select s.studid, s.name, b.bookid, b.name 
where s.studid=? 
from student s 
left join student_group sg on s.studid=sg.studid 
left join group_book_permission gbp on sg.groupid=gbp.groupid 
left join book b on gbp.bookid=b.bookid 
where s.studid=? 

Список книг студент имеет доступ к производится объединение 2-х запросов. Верхний запрос получает список книг, на которые студент имеет разрешение на индивидуальной основе. В нижнем запросе перечислены книги, основанные на групповых разрешениях. Union different гарантирует, что книга отображается только один раз в списке.

+0

Танки много, но мне также нужно получить книги, где все разрешения равны нулю (что означает, что у каждого есть доступ к ней). – blop

+1

Добавьте еще один выбор, затем с объединением, который выбирает книги с нулевыми разрешениями (левое соединение с комбинацией равно null) – Shadow

Смежные вопросы