Masalah:
Pengguna MySQL yang ingin menggunakan fungsi JSON asli mungkin menghadapi cabaran dalam membina objek JSON bersarang daripada pangkalan data hubungan. Khususnya, percubaan untuk mencipta sub-objek daripada perhubungan satu-ke-banyak mencetuskan ralat "Subquery mengembalikan lebih daripada 1 baris".
Penyelesaian:
Untuk menjana bersarang dengan berkesan Objek JSON menggunakan MySQL, adalah penting untuk mengelak daripada menggunakan subkueri yang mengembalikan berbilang hasil dalam input objek induk. Sebaliknya, gabungkan hasil menggunakan fungsi GROUP_CONCAT dan tukarkannya menjadi tatasusunan JSON.
Contoh:
Berdasarkan contoh yang diberikan dalam soalan, pertanyaan berikut akan menjana struktur JSON yang dikehendaki:
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 AS c WHERE c.parent_id = p.id ) ) FROM parent_table AS p;
Pertanyaan ini menggunakan CONCAT dan GROUP_CONCAT untuk menggabungkan sub-objek yang dikehendaki dalam hasil akhir. Menghantar rentetan bercantum sebagai jenis data JSON memastikan pemformatan yang betul bagi struktur bersarang.
Hasil:
Objek JSON yang diberikan akan sejajar rapat dengan format yang dinyatakan dalam soalannya:
{ "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" } ] }
Tambahan Nota:
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat \'Subquery Mengembalikan Lebih Daripada 1 Baris\' Semasa Menjana Objek JSON Bersarang dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!