私は3つのテーブルを持っています:
section
id
name
permission
id
section_id
name
exclusion_permission
permission_id
クエリは次のとおりです。
SELECT
p.id AS permission_id,
p.name AS permission_name,
s.id AS section_id,
s.name AS section_name
FROM
section s
LEFT OUTER JOIN
permission p
ON
p.section_id = s.id
LEFT OUTER JOIN
exclusion_permission lep
ON
lep.permission_id = p.id
WHERE
lep.permission_id IS NULL
テーブルデータは次のとおりです。
section
id name
1 admin
2 sales
3 moderator
4 intern
permission
id section_id name
1 1 root
2 2 sell
3 2 buy
4 3 edit_user
5 3 delete_user
クエリは
1, root, 1, admin
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
5, delete_user, 3, moderator
,, 4, intern
ここで、次の除外権限をミックスに投入すると、次のようになります。
exclusion_permission
permission_id
1
5
クエリは次を返します。
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
,, 4, intern
ご覧のとおり、モデレーターセクションには、もう1つの行が関連付けられているため、まだそこにあります。ただし、adminセクションは、関連付けられている唯一の権限が除外されているため、削除されています。私がしたいのは、クエリが次を返すようにすることです。
,, 1, admin
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
,, 4, intern
そのため、セクションに権限がない場合は、セクションを表示します。また、セクションにすべて除外されている権限がある場合でも、関連付けられた権限のないセクションを表示します。
どうすればいいですか?