таблица модулей:
cms_objects
---
id
name
таблица прав групп:
cms_groups_permissions
---
id
group_id
obj_id
нужно получить результат вида:
cms_objects.name|cms_groups_permissions.id|
используя условие WHERE (cms_groups_permissions.group_id = @group_id)
Часть результата — модули для которых у заданной группы не существует прав должна отображаться как: cms_objects.name|NULL|
Как должен вылядеть запрос?
SELECT cms_objects.name, cms_groups_permissions.id
FROM cms_objects LEFT JOIN cms_groups_permissions ON cms_objects.id = cms_groups_permissions.obj_id
WHERE cms_groups_permissions.group_id IS NULL OR cms_groups_permissions.group_id = @group_id
Для кажой группы этот запрос возвращает права не на все имеющиеся модули, а только на разрешённые группе и непринадлежащие ни к какой группе вообще (cms_groups_permissions.group_id IS NULL).
сейчас в таблице модулей:
id name
1 дерево сайта
2 новости
5 пользователи
11 группы
12 права групп
в таблице групп:
id name
1 менеджер
2 администратор
3 главный администратор
в таблице прав:
Код: Выделить всё
id group_id obj_id
1 3 1
2 3 2
3 3 5
4 1 2
5 1 1
7 2 1
8 2 2
9 2 5
10 3 12
дерево сайта| 5
новости | 4
группы | NULL
а должно быть:
дерево сайта| 5
новости | 4
пользователи| NULL
группы | NULL
права групп | NULL
Как сделать, чтобы выбирались и права, которые уже присоединены к другим группам?