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

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

DDD
DDDオリジナル
2024-12-01 21:50:13239ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。