次のテーブルがあります。
items id, principaluri, title
principals id, uri, name
members principal_id, member_id
アイテムの principaluri は、principals uri フィールドへの参照です。members テーブルは、プリンシパル間の関係を定義します。つまり、プリンシパルのメンバーは、principal_id のプリンシパルのアイテムにアクセスできます。プリンシパルのすべてのアイテムを取得するための選択はどのように見えますか?
メンバーシップのプリンシパルを取得するには
SELECT p.*
FROM principals p
LEFT JOIN members m ON m.principal_id = p.id
WHERE p.id = m.principal_id and p.uri = 'myuri'
しかし今、リストからすべてのアイテムを取得する必要があります。
- - アップデート - -
プリンシパルテーブルには、次のようなレコードもあります
20, 'principals/admin', 'main account'
21, 'principals/admin/read', 'read access'
22, 'principals/admin/write', 'write access'
30, 'principals/test', 'main account'
31, 'principals/test/read', 'read access'
32, 'principals/test/write', 'write access'
メンバー テーブルは次のようになります。
21,30
22,30
これは、ユーザー テストが管理者ユーザーの項目への読み取りおよび書き込みアクセス権を持っていることを意味します。
しかし、items テーブルには次のようなエントリがあります。
100, 'principals/admin', 'Foo'
101, 'principals/admin', 'Bar'