2017-03-15 44 views
0

數據庫:MySQL級聯ID的連接值

我有兩個表,一個用於用戶分配的角色,另一個包含角色信息。我的問題是,分配的角色存儲在單個字段中,用逗號分隔。我需要構建一個按名稱列出角色的報告,而不是ID,但仍然位於由列分隔的單個字段中。

我在想GROUP_CONCAT可能是解決方案,但我已經看到它用於創建連接列表,而不是使用已存在的連接列表。

表1:USERS

ID | FNAME | LNAME | ROLE_IDS 
------------------------------------------ 
1 | Bob | Jones | 445,44,45,449,459 
2 | Mark | Doe | 426,459,445 
3 | Jeff | Apple | 444,45 

表2:角色

ID | ROLE_NAME 
------------------------------------ 
4 | Basic 
13 | Reporting 
16 | Advanced 
44 | Admin 
45 | Super User 
426 | Accounting 
444 | User 
445 | Receivables 
449 | Processing 
459 | Research 

預期的查詢結果:

ID | FNAME | LNAME | ROLES 
------------------------------------------- 
1 | Bob | Jones | Receivables, Admin, Super User, Processing, Research 
2 | Mark | Doe | Accounting, Research, Receivables 
3 | Jeff | Apple | User, Super User 
+0

您是否還需要維護訂購? –

+0

不,不一定。我想一旦我有了我的結果,如果需要的話,我可以在訂單上工作。 – N1tr0

+0

我已爲我的答案 –

回答

0

爲了得到引用的角色名,則可以使用GROUP_CONCAT這樣的:

SELECT us.ID,us.FNAME,us.LNAME, 
     GROUP_CONCAT(ro.ROLE_NAME) ROLES_NAME 
FROM USERS us 
     INNER JOIN ROLES ro 
      ON FIND_IN_SET(ro.ID, us.ROLE_IDS) > 0 
GROUP BY us.ID 

我已經在SQLFIDDLE中測試過,並且正常工作。

+0

感謝阿卡什!完美的作品。 – N1tr0