数据库:MySQL
我有两个表,一个用于用户分配的角色,另一个用于包含角色信息。我的问题是分配的角色存储在一个字段中,以逗号分隔。我需要构建一个报告,按名称列出角色,而不是id,但仍然在列中的单个字段中。
我认为GROUP_CONCAT可能是解决方案,但我已经看到它用于创建连锁列表,而不是使用已存在的列表。
表1:用户
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:ROLES
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)
要获取引用角色名称,您可以使用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进行了测试并且工作正常。