Ray*_*nga 1 mysql sql arrays json group-by
我有两个 MySQL 表
category(id, name)
product(id, name, category_id)
Run Code Online (Sandbox Code Playgroud)
product(category_id)是 的外键category(id),关系是一对多对一的关系,因此一个类别可以有多个产品。
我试图从数据库中获取它并以 JSON 格式返回多个类别,所以它看起来像这样:
[
{
"id": 1,
"name": "Category 1",
"products": [
{
"id": 1,
"name": "Chicken"
},
{
"id": 2,
"name": "Beef"
}
]
},
{
"id": 2,
"name": "Category 2",
"products": [
{
"id": 3,
"item": "Fries"
},
{
"id": 4,
"item": "Burgers"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
产品嵌套在相应类别的实体中。
我是一个新手,不知道如何使用 MySQL 中的 nodeJs 重现这个问题。请协助
在MySQL中,可以使用json生成函数json_object()和json聚合函数json_arrayagg()。
以下查询为每个类别生成一条记录,每个记录包含一个 json 对象:
select
json_object(
'id', c.id,
'name', c.name,
'products', json_arrayagg(
json_object(
'id', p.id,
'name', p.name
)
)
) cat
from category c
inner join product p on p.category_id = c.id
group by c.id, c.name
Run Code Online (Sandbox Code Playgroud)
如果您想将所有记录聚合在一个唯一的 json 数组中,那么您可以添加另一个聚合级别:
select json_arrayagg(cat)
from (
select
json_object(
'id', c.id,
'name', c.name,
'products', json_arrayagg(
json_object(
'id', p.id,
'name', p.name
)
)
) cat
from category c
inner join product p on p.category_id = c.id
group by c.id, c.name
) t
Run Code Online (Sandbox Code Playgroud)