Masalah:
Menggunakan fungsi JSON MySQL 5.7.12, bagaimana anda boleh bina dokumen JSON dengan sub-objek terbenam daripada data dalam hubungan jadual?
Persediaan Pangkalan Data:
Pertimbangkan jadual berikut:
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 yang Diingini Output:
[{ "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" } ] }]
Penyelesaian:
Untuk menjana JSON bersarang yang dikehendaki, anda boleh menggunakan fungsi GROUP_CONCAT MySQL untuk menggabungkan berbilang baris daripada child_table ke dalam rentetan. Kemudian, balut rentetan dalam JSON_ARRAY untuk menukarnya kepada tatasusunan 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;
Pertanyaan ini akan menjana dokumen JSON tepat seperti yang dinyatakan dalam output yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Menjana JSON Bersarang daripada Jadual Hubungan dalam MySQL 5.7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!