mysql 如何创建具有父级和多个查尔兹和孙子级查尔兹的JSON列

flseospp  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(56)

我是新的MySQL和找不到正确的答案,所以我希望你们能帮助我。
我有三张table。

  • 应用程序(列: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列。
如果您需要更多信息,请告诉我!提前感谢!
我已经试过这个和更多了,它不符合我的需要。link

xe55xuns

xe55xuns1#

在构建具有多层嵌套的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);

字符串

0ejtzxu1

0ejtzxu12#

@Bill它工作了,但现在我想添加额外的查尔兹。我试着复制选择为t,并更改字段名等。但它没有工作。

(
  SELECT appli_num, modu_num,
    JSON_ARRAYAGG(
      JSON_OBJECT(
        "repo_num", repo_num,
        "repo_title", repo_title
      )
    ) AS reports
  FROM reports
  GROUP BY appli_num, modu_num
) AS r

字符串
我在第一个SELECT语句中将其添加到json_Object中。

SELECT JSON_PRETTY(
  JSON_ARRAYAGG( 
    JSON_OBJECT(
      "modu_num", m.modu_num,
      "modu_title", m.modu_title,
      "data_fields", t.data_fields,
      "reports", r.reports,
    )
  )


这就是我想要创造的

[{
    "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"
            }
            ],
    "reports": [
            {
                "repo_num": 1,
                "repo_title": "repo title 1"
            }
            ]
},
{
    "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"
            }
            ],
    "reports": [
            {
                "repo_num": 2,
                "repo_title": "repo title 2"
            }
            ]
}
]

相关问题