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