ホームページ > データベース > mysql チュートリアル > MySQL 5.7 でリレーショナル テーブルからネストされた JSON を生成するにはどうすればよいですか?

MySQL 5.7 でリレーショナル テーブルからネストされた JSON を生成するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-30 20:58:14
オリジナル
570 人が閲覧しました

How to Generate Nested JSON from Relational Tables in MySQL 5.7?

MySQL ネイティブ関数を使用したネストされた JSON の生成

問題:

MySQL 5.7.12 の JSON 関数を使用すると、どのようにできますか?リレーショナルのデータからサブオブジェクトが埋め込まれた JSON ドキュメントを構築するテーブル?

データベース設定:

次のテーブルを検討します:

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');
ログイン後にコピー

必要な JSON出力:

[{
    "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"
        }
    ]
}]
ログイン後にコピー

解決策:

必要なネストされた JSON を生成するには、MySQL の GROUP_CONCAT 関数を使用して、child_table の複数の行を連結します。弦。次に、文字列を JSON_ARRAY でラップして JSON 配列に変換します。

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;
ログイン後にコピー

このクエリは、目的の出力で指定されたとおりに JSON ドキュメントを生成します。

以上がMySQL 5.7 でリレーショナル テーブルからネストされた JSON を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート