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