我将数据存储在MariaDB中的标准表中,但希望将相关表中的记录作为JSON字符串返回。
我打算做的是有一个函数,在其中我可以传入exerciseId
,并且函数返回所有相关exerciseMuscle
记录的JSON字符串,这意味着存储的proc返回的每个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只包含第一个记录。
发布于 2016-10-09 12:36:58
原来我需要的是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"}
https://stackoverflow.com/questions/39943309
复制相似问题