问题:
使用 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中文网其他相关文章!