首頁 > 資料庫 > mysql教程 > 如何在 MySQL 5.7 中從關係表產生巢狀 JSON?

如何在 MySQL 5.7 中從關係表產生巢狀 JSON?

Patricia Arquette
發布: 2024-11-30 20:58:14
原創
569 人瀏覽過

How to Generate Nested JSON from Relational Tables in MySQL 5.7?

使用MySQL 原生函數產生巢狀JSON

問題:

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板