我将数据存储在MariaDB中的标准表中,但是希望将相关表中的记录作为JSON字符串返回。
我打算做的是我可以传入exerciseId
的函数,该函数返回所有相关exerciseMuscle
记录的JSON字符串,这意味着每个exercise
记录返回一个存储过程还可以包含来自子表的嵌套数据。
我已经能够使用COLUMN_JSON
和COLUMN_CREATE
创建JSON记录,但只能将其作为一组单独记录返回,而不是根据需要返回JSON值数组。我使用的SQL是:
select
e.id,
CONVERT(COLUMN_JSON(COLUMN_CREATE(
'role', em.muscleRoleName,
'muscle', em.muscleName
)) USING utf8) as musclesJson
from
exercise e
inner join exerciseMuscle em
on e.id = em.exerciseId
where
e.id = 96;
返回:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"}
| 96 | {"role":"secondary","muscle":"shoulders"}
当我想要的是:
| id | musclesJson
| 96 | [{"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}]
是否可以在一行中返回多个结果而无需迭代结果并手动构建它?如果我向SQL添加group by
,那么JSON只包含第一条记录。
答案 0 :(得分:2)
原来我需要GROUP_CONCAT
,并指定一个逗号作为分隔符。所以将我的SQL更改为:
select
e.id,
CONVERT(
GROUP_CONCAT(
COLUMN_JSON(
COLUMN_CREATE(
'role', em.muscleRoleName,
'muscle', em.muscleName
)
)
SEPARATOR ','
) USING utf8) as muscles
from
exercise e
inner join exerciseMuscle em
on e.id = em.exerciseId
where
e.id = 96;
返回:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}