Доброго утра.
Есть таблицы в БД (в скобках пример записи):
premissions : id name //(1,"page_edit")
group_premissions: id group_id premission_id //(1,1)
user_groups: id group_name //(1,"Редакторы")
users: id group_id //(1,1)
premissions - привелегии
user_groups - список групп
users - юзеры
group_premissions - связь группы, и выданных ей привелегий
Нужен запрос, вытаскивающий привилегии пользователя в массив привилегий, который потом перед загрузкой страницы тупо проверяется
if(in_array("page_edit"),$user->get_access()) { грузи страницу } else {die("Вам низя тут быть!");}
Я составил вот такой запрос:
SELECT
premissions.name,
group_premissions.group_id,
group_premissions.premission_id,
users.id as userid,
user_groups.group_name
from group_premissions
inner join premissions on group_premissions.premission_id=premissions.id
inner join user_groups on user_groups.id=group_premissions.group_id
inner JOIN users on users.group_id=user_groups.id
WHERE users.id='1'
Все отлично работает. Но вдруг появился вопрос - а правильно ли я использую INNER JOIN? может нужно использовать LEFT или RIGHT JOIN? я вообще никогда в жизни ничего кроме INNER JOIN не использовал. А на первых шагах вообще писал так:
SELECT A.value1, A.value2, B.value1, B.value2 FROM A,B where A.value1=1 AND A.value2=B.value1
Я читал про перекрытия запросов LEFT и RIGHT JOIN и как там они "коньюнктируют и дезъюнктируют" результаты, но я так и не понял до конца - где такие объединения могут понадобиться, зачем, и правильно ли я использую INNER?
Ну или как? Работает - не трогай? =)) Откройте мне глаза дабы я мог снять с себя шапочку из фольги.