Mysql 连接已连接ID的值
数据库:MySQL 我有两个表,一个用于用户分配的角色,另一个包含角色信息。我的问题是,分配的角色存储在单个字段中,由逗号分隔。我需要构建一个报告,该报告按名称而不是id列出角色,但仍然位于由列分隔的单个字段中 我认为GROUP_CONCAT可能是解决方案,但我看到它用于创建串联列表,而不是使用已经存在的列表 表1:用户Mysql 连接已连接ID的值,mysql,Mysql,数据库:MySQL 我有两个表,一个用于用户分配的角色,另一个包含角色信息。我的问题是,分配的角色存储在单个字段中,由逗号分隔。我需要构建一个报告,该报告按名称而不是id列出角色,但仍然位于由列分隔的单个字段中 我认为GROUP_CONCAT可能是解决方案,但我看到它用于创建串联列表,而不是使用已经存在的列表 表1:用户 ID | FNAME | LNAME | ROLE_IDS ------------------------------------------ 1 | Bob |
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
要获取引用角色名称,您可以像这样使用
GROUP\u 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
我已经在中进行了测试,工作正常。您还需要保留订单吗?不,不一定。我想一旦我有了结果,如果需要的话,我可能会进行排序。我已经发布了我的答案。我发现了如何在组_CONCAT中排序结果并修改分隔符:组_CONCAT(不同的ro.ROLE_NAME order by ro.ROLE_NAME separator',')作为角色_NAME谢谢Akash!工作完美。