Return 多个 COLUMN_JSON 结果作为 JSON 数组
Return multiple COLUMN_JSON results as JSON array
我将数据存储在 MariaDB 的标准表中,但想 return 相关表中的记录作为 JSON 字符串。
我打算做的是有一个函数,我可以在其中传递 exerciseId
函数 return 是所有相关 exerciseMuscle
记录的 JSON 字符串,意思是每个 exercise
由存储过程编辑的 return 记录也可以包含来自子表的嵌套数据。
我已经能够使用 COLUMN_JSON
和 COLUMN_CREATE
创建 JSON 记录,但只能将其作为一组单独的记录获取到 return,而不是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;
这个returns:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"}
| 96 | {"role":"secondary","muscle":"shoulders"}
当我想要的是:
| id | musclesJson
| 96 | [{"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}]
是否可以在一行中 return 多个结果,而不必遍历结果并手动构建它?如果我将 group by
添加到 SQL,则 JSON 仅包含第一条记录。
原来我需要的是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;
Returns:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}
我将数据存储在 MariaDB 的标准表中,但想 return 相关表中的记录作为 JSON 字符串。
我打算做的是有一个函数,我可以在其中传递 exerciseId
函数 return 是所有相关 exerciseMuscle
记录的 JSON 字符串,意思是每个 exercise
由存储过程编辑的 return 记录也可以包含来自子表的嵌套数据。
我已经能够使用 COLUMN_JSON
和 COLUMN_CREATE
创建 JSON 记录,但只能将其作为一组单独的记录获取到 return,而不是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;
这个returns:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"}
| 96 | {"role":"secondary","muscle":"shoulders"}
当我想要的是:
| id | musclesJson
| 96 | [{"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}]
是否可以在一行中 return 多个结果,而不必遍历结果并手动构建它?如果我将 group by
添加到 SQL,则 JSON 仅包含第一条记录。
原来我需要的是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;
Returns:
| id | musclesJson
| 96 | {"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}