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