ホームページ > データベース > mysql チュートリアル > ネイティブ JSON 関数を使用して MySQL のリレーショナル テーブルからネストされた JSON オブジェクトを生成する方法

ネイティブ JSON 関数を使用して MySQL のリレーショナル テーブルからネストされた JSON オブジェクトを生成する方法

DDD
リリース: 2024-12-01 21:50:13
オリジナル
240 人が閲覧しました

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

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

MySQL ネイティブ JSON 関数は、データベース内で JSON データを操作するための強力なメカニズムを提供します。 1 対多の関係を含むリレーショナル テーブルを扱う場合、ネストされた JSON オブジェクトの生成が困難になることがあります。この記事では、MySQL のネイティブ 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 オブジェクトを生成する鍵は、GROUP_CONCAT 関数にあります。 GROUP_CONCAT 関数と JSON_OBJECT 関数を組み合わせることで、複数の JSON オブジェクトを 1 つの配列に連結できます。

次のクエリを考えてみましょう:

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 オブジェクトを生成します。まず、GROUP_CONCAT を使用して、子行の JSON オブジェクトを JSON 配列に連結します。次に、CONCAT 関数を使用して JSON 配列を角括弧で囲み、有効な JSON 文字列を作成します。最後に、CAST 関数は文字列を JSON オブジェクトに変換します。

結論

GROUP_CONCAT 関数と JSON_OBJECT 関数を活用することで、リレーショナル テーブルから複雑なネストされた JSON オブジェクトを生成できます。 MySQL ではネイティブ JSON 関数を使用します。この機能により、MySQL で JSON を使用した効率的なデータ操作と交換の可能性が解き放たれます。

以上がネイティブ JSON 関数を使用して MySQL のリレーショナル テーブルからネストされた JSON オブジェクトを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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