首页 > 数据库 > mysql教程 > 如何在 MySQL 5.7 中从关系表生成嵌套 JSON?

如何在 MySQL 5.7 中从关系表生成嵌套 JSON?

Patricia Arquette
发布: 2024-11-30 20:58:14
原创
631 人浏览过

How to Generate Nested JSON from Relational Tables in MySQL 5.7?

使用 MySQL 原生函数生成嵌套 JSON

问题:

使用 MySQL 5.7.12 的 JSON 函数,你如何根据关系型数据构建带有嵌入子对象的 JSON 文档表?

数据库设置:

考虑以下表格:

CREATE TABLE `parent_table` (
   `id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`)
);
CREATE TABLE `child_table` (
   `id` int(11) NOT NULL,
   `parent_id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`,`parent_id`)
);
insert `parent_table` values (1,'parent row 1');
insert `child_table` values (1,1,'child row 1');
insert `child_table` values (2,1,'child row 2');
登录后复制

所需的 JSON输出:

[{
    "id" : 1,
    "desc" : "parent row 1",
    "child_objects" : [{
            "id" : 1,
            "parent_id" : 1,
            "desc" : "child row 1"
        }, {
            "id" : 2,
            "parent_id" : 1,
            "desc" : "child row 2"
        }
    ]
}]
登录后复制

解决方案:

要生成所需的嵌套 JSON,您可以使用 MySQL 的 GROUP_CONCAT 函数将 child_table 中的多行连接到一个细绳。然后,将字符串包装在 JSON_ARRAY 中以将其转换为 JSON 数组。

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',(select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(
                    'id',id,'parent_id',parent_id,'desc',`desc`)),
                ']')
         AS JSON) from child_table where parent_id = p.id)

 ) from parent_table p;
登录后复制

此查询将生成与所需输出中指定的完全一致的 JSON 文档。

以上是如何在 MySQL 5.7 中从关系表生成嵌套 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板