問題:
使用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中文網其他相關文章!