Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengelakkan Ralat \'Subquery Mengembalikan Lebih Daripada 1 Baris\' Semasa Menjana Objek JSON Bersarang dalam MySQL?

Bagaimana untuk Mengelakkan Ralat \'Subquery Mengembalikan Lebih Daripada 1 Baris\' Semasa Menjana Objek JSON Bersarang dalam MySQL?

DDD
Lepaskan: 2024-11-28 06:31:11
asal
868 orang telah melayarinya

How to Avoid

Menjana Objek JSON Bersarang dengan Fungsi JSON Asli MySQL

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;
Salin selepas log masuk

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"
    }
  ]
}
Salin selepas log masuk

Tambahan Nota:

  • Penyelesaian menangani ralat "Subquery returns more than 1 row" dengan menukar hasil subquery kepada rentetan yang dipisahkan koma.
  • Menggunakan CONCAT dan menghantar hasil kepada JSON memastikan bahawa struktur bersarang diformat dengan betul.
  • Pendekatan ini serasi dengan MySQL versi 5.7.12 dan ke atas.

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!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan