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
829 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!

sumber:php.cn
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