使用mysql从连接记录构建层次结构

时间:2017-11-02 22:23:32

标签: mysql json hierarchy

Table1 (users): id, name
Table2 (roles): id, name
Table3 (user-roles): userid, roleid

以下JSON中的所需结果:

{
  "id":1,
  "name":"username",
  "roles":[
     {
       "id":1
       "name":"admin"
     },
     {
       "id":2,
       "name":"community manager"
     }
  ]
}

是否有MySQL语法为UNLIMITED连接输出所需的结果?

暂停:不确定,我怎么能更好地说出来。 有两个表通过第三个表(用户角色)相关联。 应根据查询JOIN语句将记录排列为JSON层次结构。

请参阅MSSQL soulution:https://docs.microsoft.com/en-us/sql/relational-databases/json/format-query-results-as-json-with-for-json-sql-server

1 个答案:

答案 0 :(得分:1)

此查询返回您想要的内容,但它只能在MySQL 8.0或更高版本上运行

SELECT JSON_OBJECT('id', users.id, 'name', users.name, 'roles', JSON_ARRAYAGG(JSON_OBJECT('id', roles.id, 'name', roles.name)))
FROM users
  INNER JOIN user_roles
  ON users.id = user_roles.userid

  INNER JOIN roles
  ON user_roles.roleid = roles.id
GROUP BY users.id;