Maison >base de données >tutoriel mysql >Comment générer des objets JSON imbriqués à partir de tables relationnelles dans MySQL à l'aide de fonctions JSON natives ?

Comment générer des objets JSON imbriqués à partir de tables relationnelles dans MySQL à l'aide de fonctions JSON natives ?

DDD
DDDoriginal
2024-12-01 21:50:13326parcourir

How to Generate Nested JSON Objects from Relational Tables in MySQL Using Native JSON Functions?

Génération d'objets JSON imbriqués dans MySQL avec des fonctions JSON natives

Les fonctions JSON natives MySQL fournissent un mécanisme puissant pour travailler avec des données JSON dans la base de données . Lorsqu'il s'agit de tables relationnelles contenant des relations un-à-plusieurs, la génération d'objets JSON imbriqués peut s'avérer difficile. Dans cet article, nous explorerons comment obtenir des objets JSON imbriqués à l'aide des fonctions JSON natives de MySQL.

Le problème

Considérez le scénario suivant :

CREATE TABLE `parent_table` (
   `id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`)
);
CREATE TABLE `child_table` (
   `id` int(11) NOT NULL,
   `parent_id` int(11) NOT NULL,
   `desc` varchar(20) NOT NULL,
   PRIMARY KEY (`id`,`parent_id`)
);
insert `parent_table` values (1,'parent row 1');
insert `child_table` values (1,1,'child row 1');
insert `child_table` values (2,1,'child row 2');

Le but est de générer un document JSON qui ressemble au suivant :

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

La solution

La clé pour générer des objets JSON imbriqués réside dans la fonction GROUP_CONCAT. En combinant la fonction GROUP_CONCAT avec la fonction JSON_OBJECT, nous pouvons concaténer plusieurs objets JSON en un seul tableau.

Considérez la requête suivante :

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;

Cette requête génère l'objet JSON imbriqué souhaité en utilisez d’abord GROUP_CONCAT pour concaténer les objets JSON des lignes enfants dans un tableau JSON. Ensuite, la fonction CONCAT est utilisée pour placer le tableau JSON entre crochets et créer une chaîne JSON valide. Enfin, la fonction CAST convertit la chaîne en objet JSON.

Conclusion

En tirant parti des fonctions GROUP_CONCAT et JSON_OBJECT, nous pouvons générer des objets JSON imbriqués complexes à partir de tables relationnelles dans MySQL en utilisant les fonctions JSON natives. Cette fonctionnalité libère le potentiel de manipulation et d'échange efficaces de données à l'aide de JSON dans MySQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn