Eu tenho 2 tabelas com as quais estou interagindo.
A primeira tabela: acl_permissions (é apenas uma tabela normal).
+-----------------------------------+
| acl_permissions |
+----+-------------+----------------+
| id | name | permission |
+----+-------------+----------------+
| 1 | Add User | addUser |
| 2 | Edit User | editUser |
| 3 | Delete User | deleteUser |
| 4 | View User | viewUser |
| 5 | Test Name | testPermission |
+----+-------------+----------------+
A segunda tabela: acl_group_permissions é uma tabela de junção.
+--------------------------------+
| acl_group_permissions |
+----+----------+----------------+
| id | group_id | permissions_id |
+----+----------+----------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 4 |
| 5 | 2 | 4 |
| 6 | 2 | 5 |
+----+----------+----------------+
Eu tenho uma consulta para mostrar todas as permissões atualmente permitidas pelo group_id '1'.
SELECT acl_permissions.id, acl_permissions.name, acl_permissions.permission
FROM acl_permissions
JOIN acl_group_permissions
ON acl_permissions.id = acl_group_permissions.permission_id
WHERE acl_group_permissions.group_id = 1
O resultado é:
+----+-------------+----------------+
| id | name | permission |
+----+-------------+----------------+
| 1 | Add User | addUser |
| 2 | Edit User | editUser |
| 3 | Delete User | deleteUser |
| 4 | View User | viewUser |
+----+-------------+----------------+
MEU PROBLEMA
Quero que uma consulta mostre todas as permissões que não são permitidas pelo group_id '1'.
O resultado desejado seria:
+----+-------------+----------------+
| id | name | permission |
+----+-------------+----------------+
| 5 | Test Name | testPermission |
+----+-------------+----------------+
O mais próximo que eu tenho disso é:
SELECT acl_permissions.id, acl_permissions.name, acl_permissions.permission
FROM acl_permissions
LEFT OUTER JOIN acl_group_permissions
ON acl_permissions.id = acl_group_permissions.permission_id
WHERE acl_group_permissions.group_id IS NULL
Com o resultado sendo:
+----+-------------+----------------+
| id | name | permission |
+----+-------------+----------------+
| 4 | View User | viewUser |
| 5 | Test Name | testPermission |
+----+-------------+----------------+
Como faço para alimentar o group_id de '1' na consulta para eliminar o ID 4.
Eu pesquisei bastante no Google, mas encontro exemplos e soluções que estão próximas, mas são exatamente exatas à minha situação.
IE: Usando uma tabela de junção. Meus infográficos de tipos de associação do MySQL também não ajudam.
Socorro..! Meu cérebro está derretendo ..!
Não é o melhor, mas isso funcionaria
fonte
CONSULTA PROPOSTA
SUAS DADOS DE AMOSTRA
SUAS DADOS DE AMOSTRA CARREGADOS
CONSULTA PROPOSTA EXECUTADA
DE UMA CHANCE !!!
fonte