mysql - 串联 ID 的串联值

标签 mysql

数据库: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:角色

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_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 中测试过它并且工作正常。

关于mysql - 串联 ID 的串联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42820600/

相关文章:

mysql - 玛根托 : Subtraction and Division on addAttributeToFilter

java - log4j2异步记录器是否真的将数据插入MySQL?

mysql - GROUP_CONCAT 有两个字段

php - 如何从数组中获取行? mysqli

php - session 未保存为 id

php - Sql 查询绑定(bind)变量与指定变量

php - Xubuntu Linux - 为什么我的本地主机不将我定向到我的虚拟主机站点?

mysql - 选择一个表并连接 2 个不同的表

mysql - 在mysql中查询到jooq

mysql - 转换后更新存储为 VARCHAR 的表中的 DATE