如何创建包含父级和多个子级和孙级的 JSON 列

问题描述 投票:0回答:1

我是 MySQL 新手,找不到正确的答案,所以我希望你们能帮助我。

我有3张桌子。

  • 应用程序(列:appli_num (PK)、appli_title)
  • 模块(列:appli_num (PK)、modu_num (PK)、modu_title)和模块是应用程序的子项
  • Data_fields(列:appli_num (PK)、modu_num (PK)、data_num(PK)、data_title)和 data_fields 是模块的子项

我尝试了很多方法,但我不知道如何创建以下 JSON 列。

[{
    "modu_num": 1,
    "modu_title": "Module 1",
    "data_fields": [
            {
                "data_num": 1,
                "data_title": "data title 1"
            },
            {
                "data_num": 2,
                "data_title": "data title 2"
            },
            {
                "data_num": 3,
                "data_title": "data title 3"
            }
            ]
},
{
    "modu_num": 2,
    "modu_title": "Module 2",
    "data_fields": [
            {
                "data_num": 4,
                "data_title": "data title 4"
            },
            {
                "data_num": 5,
                "data_title": "data title 5"
            },
            {
                "data_num": 6,
                "data_title": "data title 6"
            }
            ]
}
]

作为第二列,我只想获取 appli_num 列。

如果您需要更多信息,请告诉我! 预先感谢!

我已经尝试过这个以及更多其他方法,但它不能满足我的需求。 链接

mysql arrays json tree
1个回答
0
投票

构建多层嵌套的 JSON 数组聚合时,必须有多层子查询来生成每一层的聚合。

SELECT JSON_PRETTY(
  JSON_ARRAYAGG( 
    JSON_OBJECT(
      "modu_num", m.modu_num,
      "modu_title", m.modu_title,
      "data_fields", t.data_fields
    )
  ) 
) AS m
FROM (
  SELECT appli_num, modu_num,
    JSON_ARRAYAGG(
      JSON_OBJECT(
        "data_num", data_num,
        "data_title", data_title
      )
    ) AS data_fields
  FROM Data_fields
  GROUP BY appli_num, modu_num
) AS t
JOIN Modules m USING (modu_num);
© www.soinside.com 2019 - 2024. All rights reserved.