Heim > Datenbank > MySQL-Tutorial > Wie generiert man verschachtelte JSON-Objekte aus Eins-zu-Viele-Beziehungen in MySQL?

Wie generiert man verschachtelte JSON-Objekte aus Eins-zu-Viele-Beziehungen in MySQL?

Barbara Streisand
Freigeben: 2024-12-13 07:59:10
Original
123 Leute haben es durchsucht

How to Generate Nested JSON Objects from One-to-Many Relationships in MySQL?

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

Dieser Artikel zeigt, wie Sie die nativen JSON-Funktionen von MySQL Version 5.7.12 verwenden, um verschachtelte Objekte zu erstellen JSON-Dokumente, die Eins-zu-viele-Beziehungen in relationalen Daten darstellen.

Problem Anweisung

Gegeben zwei Tabellen, parent_table und child_table, die eine Eltern-Kind-Beziehung darstellen, besteht das Ziel darin, ein JSON-Dokument mit der folgenden Struktur zu generieren:

[
    {
        "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"
            }
        ]
    }
]
Nach dem Login kopieren

Lösung

Anfangs führten Versuche, die verschachtelten JSON-Objekte mithilfe einfacher verschachtelter Unterabfragen zu erstellen, zu einem Fehler, da MySQL erwartet einfache Objektpaare im übergeordneten JSON-Objekt. Um dieses Problem zu lösen, verwenden wir die Funktion GROUP_CONCAT, um mehrere Unterabfrageergebnisse in einer einzigen Zeichenfolge zu verketten und dieses Ergebnis dann in ein JSON-Array zu konvertieren.

Die resultierende JSON-Ausgabe enthält jedoch Escape-Zeichen aufgrund der Behandlung der Unterabfrage als eine Zeichenfolge. Um dies zu beheben, verwenden wir die Funktionen CAST und CONCAT, um das JSON-Array direkt in der Unterabfrage zu erstellen, anstatt uns auf die Verkettung in der Hauptabfrage zu verlassen.

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 where parent_id = p.id)

 ) from parent_table p;
Nach dem Login kopieren

Diese Abfrage erzeugt die gewünschte Ausgabe:

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [{\"id\": 1, 
    \"desc\": \"child row 1\", 
    \"parent_id\": 1
    }, 
    {\"id\": 2, 
    \"desc\": \"child row 2\", 
    \"parent_id\": 1
    }]  
}'
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie generiert man verschachtelte JSON-Objekte aus Eins-zu-Viele-Beziehungen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage