0

私は4つのテーブルを持っています(他の多くのテーブルの中で-関連するものだけを表示しています)。彼らです:

  • 「ユーザー」
    • ID
    • 名前
    • role_id
  • 「役割」
    • ID
    • 名前
  • "chapter_role_view_permissions"
    • ID
    • chapter_id
    • role_id
  • 「チャプター」
    • ID
    • 名前

すべてのユーザーのリスト、ロール名、ユーザーごとのすべてのチャプター、および各チャプターへの表示アクセス権があるかどうかを返すクエリを作成しようとしています。2 人のユーザーと 2 つのチャプターがあるとします。ユーザー 1 は role_id=1 で、ユーザー 2 は role_id=2 です。chapter_role_view_permissions には 1 つのレコード ( id:1 | chapter_id: 1 | role_id: 1 ) があり、これは role_id=1 を持つユーザーのみがチャプター 1 を表示できることを意味します。

探しているクエリ結果は次のようになります。

|---users.id---|--roles.id---|---chapters.id--|-can_view_chapter-|

|----- 1 ------|----- 1 -------|------- 1 --------|---- ------- 1 -----------|

|----- 1 ------|----- 1 -------|------- 2 --------|---- ------- 0 ----------|

|----- 2 ------|----- 2 -------|------- 1 --------|---- ------- 0 ----------|

|----- 2 ------|----- 2 -------|------- 2 --------|---- ------- 0 ----------|

クエリがどのように見えるか考えていますか? chapter_role_view_permissions に「allowed」という新しいフィールドを作成し、allowed=1 または allowed=0 のロール タイプごとに新しいレコードを挿入する必要はありません。

4

3 に答える 3

2
SELECT users.name, roles.name, chapters.name
FROM users
  LEFT OUTER JOIN roles ON users.role_id = roles.id
  LEFT OUTER JOIN chapter_role_view_permissions link ON link.role_id = roles.id
  LEFT OUTER JOIN chapters ON chapters.id = link.chapter_id
于 2012-11-01T18:44:02.780 に答える
0
SELECT    u.id, r.id, c.id, IFNULL(c.id, 0) AS can_view_chapter
FROM      users AS u
JOIN      roles AS r ON r.id = u.role_id
LEFT JOIN chapter_role_view_permissions AS p ON p.role_id = r.id
JOIN      chapters As c ON c.id = p.chapter_id
于 2012-11-01T18:50:57.070 に答える
0

あなたが言ったように:

すべてのユーザーのリスト、ロール名ユーザーごとのすべてのチャプター、および各チャプターへの表示アクセス権があるかどうかを返すクエリを作成しようとしています

同じ順序で、クエリで自分の単語を翻訳するだけです。

SELECT users.id, roles.name, chapters.name FROM users
INNER JOIN roles ON  users.role_id=roles.id
INNER JOIN chapters ON users.id=chapters.id
WHERE users.id=USER_ID

とにかく、もっとよく説明する必要があります。チャプターとユーザーをどのように関連付けていますか? chapters.id は user.id と同じだと思いました

于 2012-11-01T18:42:31.550 に答える