Я пытаюсь настроить новую базу данных разрешений в MySQL, и я ломаю голову над чем-то, что, я уверен, очень просто.Я уверен, что что-то на эту мелодию здесь уже отвечали, но после нескольких часов поиска я не нашел ничего, что работает.
У меня есть 4 соответствующие таблицы
Разрешение (содержит все возможные разрешения)
|permission_name | description |
--------------------------------
|users.list | etc. etc. |
|users.update | etc. etc. |
|users.delete | etc. etc. |
Пользователь
| id | fname | group_id |
------------------------------
| 1 | John | 1 |
| 2 | Nancy | 1 |
| 3 | Paul | 2 |
Группа
| group_id | group_name |
-------------------------
| 1 | Webmasters |
| 2 | Corporate |
| 3 | HR |
Group_permission (содержит разрешения, относящиеся к каждой группе)
| group_id | permission_name | permission_type (1=Y|0=not set|-1=N)
----------------------------------------------
| 1 | users.list | 1 |
| 1 | users.update | 1 |
| 2 | users.list | 1 |
ОК, такпроисходит много отношений, но я пытаюсь получить ВСЕ разрешения группы для конкретного пользователя, ДАЖЕ, если разрешение группы еще не существует.
Я представлял, что это какое-то левое соединение с использованием таблицы разрешений в качестве базы, но всякий раз, когда я включаю WHERE user.id = 2, это ограничивает мой результат и не будет содержать нулевые значения с правой стороны..
SELECT a.permission_name, IFNULL(b.permission_type, 0)
FROM permission a
LEFT JOIN group_permission b on b.permission_name = a.permission_name
LEFT JOIN user c on c.group_id = b.group_id
WHERE c.id = 2
результат, который я хочу увидеть для Нэнси:
|permission_name | permission_type |
------------------------------------
|users.list | 1 |
|users.update | 0 |
|users.delete | 0 |
Я не буду знать, в какую группу входит пользователь на стороне PHP, поэтому я должен сделать запрос поиспользуя только идентификатор пользователя.
Все, что я получаю, это
|permission_name | permission_type |
------------------------------------
|users.list | 1 |
Любая помощь приветствуется.ТИА