Heim >Datenbank >MySQL-Tutorial >Wie vermeide ich den Fehler „Unterabfrage gibt mehr als eine Zeile zurück' beim Generieren verschachtelter JSON-Objekte in MySQL?

Wie vermeide ich den Fehler „Unterabfrage gibt mehr als eine Zeile zurück' beim Generieren verschachtelter JSON-Objekte in MySQL?

DDD
DDDOriginal
2024-11-28 06:31:11793Durchsuche

How to Avoid

Generieren verschachtelter JSON-Objekte mit nativen MySQL-JSON-Funktionen

Problem:

MySQL-Benutzer, die native JSON-Funktionen verwenden möchten, können möglicherweise stehen vor Herausforderungen beim Erstellen verschachtelter JSON-Objekte aus einer relationalen Datenbank. Insbesondere löst der Versuch, Unterobjekte aus Eins-zu-vielen-Beziehungen zu erstellen, den Fehler „Unterabfrage gibt mehr als 1 Zeile zurück“ aus.

Lösung:

Um verschachtelte Objekte effektiv zu generieren Bei JSON-Objekten, die MySQL verwenden, ist es wichtig, die Verwendung von Unterabfragen zu vermeiden, die mehrere Ergebnisse in der Eingabe eines übergeordneten Objekts zurückgeben. Verketten Sie stattdessen die Ergebnisse mit der Funktion GROUP_CONCAT und konvertieren Sie sie in ein JSON-Array.

Beispiel:

Aufbauend auf dem in der Frage bereitgestellten Beispiel wird die folgende Abfrage ausgeführt Generieren Sie die gewünschte JSON-Struktur:

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;

Diese Abfrage verwendet CONCAT und GROUP_CONCAT, um die gewünschten Unterobjekte zusammenzuführen das Endergebnis. Durch die Umwandlung der verketteten Zeichenfolge in einen JSON-Datentyp wird die ordnungsgemäße Formatierung der verschachtelten Struktur sichergestellt.

Ergebnis:

Das gerenderte JSON-Objekt stimmt eng mit dem in angegebenen Format überein die Frage:

{
  "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"
    }
  ]
}

Zusätzlich Hinweise:

  • Die Lösung behebt den Fehler „Unterabfrage gibt mehr als 1 Zeile zurück“, indem die Ergebnisse der Unterabfrage in eine durch Kommas getrennte Zeichenfolge konvertiert werden.
  • Verwendung von CONCAT und Umwandlung der Ergebnis an JSON stellt sicher, dass die verschachtelte Struktur ordnungsgemäß formatiert ist.
  • Dieser Ansatz ist mit MySQL Version 5.7.12 und kompatibel oben.

Das obige ist der detaillierte Inhalt vonWie vermeide ich den Fehler „Unterabfrage gibt mehr als eine Zeile zurück' beim Generieren verschachtelter JSON-Objekte in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn