Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Objek JSON Bersarang daripada Jadual Hubungan dalam MySQL Menggunakan Fungsi JSON Asli?

Bagaimana untuk Menjana Objek JSON Bersarang daripada Jadual Hubungan dalam MySQL Menggunakan Fungsi JSON Asli?

DDD
DDDasal
2024-12-01 21:50:13240semak imbas

How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?

Menjana Objek JSON Bersarang dalam MySQL dengan Fungsi JSON Asli

Fungsi JSON asli MySQL menyediakan mekanisme yang berkuasa untuk bekerja dengan data JSON dalam pangkalan data . Apabila berurusan dengan jadual hubungan yang mengandungi perhubungan satu dengan banyak, menjana objek JSON bersarang boleh menjadi mencabar. Dalam artikel ini, kami akan meneroka cara untuk mencapai objek JSON bersarang menggunakan fungsi JSON asli MySQL.

Masalahnya

Pertimbangkan senario 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');

Matlamatnya adalah untuk menjana dokumen JSON yang menyerupai berikut:

[
    {
        "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

Kunci untuk menjana objek JSON bersarang terletak pada fungsi GROUP_CONCAT. Dengan menggabungkan fungsi GROUP_CONCAT dengan fungsi JSON_OBJECT, kami boleh menggabungkan berbilang objek JSON ke dalam tatasusunan tunggal.

Pertimbangkan pertanyaan berikut:

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 menjana objek JSON bersarang yang dikehendaki dengan mula-mula menggunakan GROUP_CONCAT untuk menggabungkan objek JSON untuk baris anak ke dalam tatasusunan JSON. Kemudian, fungsi CONCAT digunakan untuk membalut tatasusunan JSON dalam kurungan segi empat sama dan mencipta rentetan JSON yang sah. Akhir sekali, fungsi CAST menukar rentetan menjadi objek JSON.

Kesimpulan

Dengan memanfaatkan fungsi GROUP_CONCAT dan JSON_OBJECT, kita boleh menjana objek JSON bersarang kompleks daripada jadual hubungan dalam MySQL menggunakan fungsi JSON asli. Keupayaan ini membuka potensi untuk manipulasi dan pertukaran data yang cekap menggunakan JSON dalam MySQL.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Objek JSON Bersarang daripada Jadual Hubungan dalam MySQL Menggunakan Fungsi JSON Asli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn