2012-11-01 51 views
0

我有4個表格(其他很多 - 只顯示相關的表格)。它們是:與連接棘手的MySQL查詢?

  • 「用戶」
    • 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和插入新記錄與每個角色類型要麼允許= 1或允許= 0

+0

作爲獎勵,我有一個附加的表我已經加入到所謂的「quiz_user_statuses」,這將加入各章的結果。 id字段和users.id字段,該字段表示該用戶在該特定章節上評分的內容(如果記錄不存在,則爲NULL)他們還沒有參加本章測驗,或者他們沒有權限參加測驗)。 – user1418227

回答

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

+0

這是一個多對多的章節和權限的情況。所以基本上用戶被分配一個角色。並且章節權限通過角色分配給用戶(通過chapter_role_view_permissions表)。不知道這是否有助於消除混淆。 – user1418227

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 
+0

這就近了。唯一的問題是在這種情況下,它只會返回:| ------ 1 ------ | ----- 1 ------- | ------- 1 -------- | ----------- 1 ----------- |而不是「can_view_chapter」(不是數據庫中的字段,希望在查詢中創建該字段)的3條記錄= 0。爲了更清楚它,我希望can_view_chapter是布爾值。因此,儘管role.id = 2的用戶無法查看第1章或第2章(因爲chapter_role_view_permissions中不存在說明chapter_id = 1且role_id = 2的記錄),但完整查詢中的記錄會顯示can_view_chapter = 0 – user1418227

+0

他們需要成爲每個用戶每章的記錄。因此,如果有5個用戶和5個章節,無論chapter_role_view_permissions中的記錄數如何,都需要返回25條記錄(5章x 5個用戶)。每個人都需要告訴我用戶標識,章節標識以及用戶是否有權查看該章節。 – user1418227

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