Return 多个 COLUMN_JSON 结果作为 JSON 数组

Return multiple COLUMN_JSON results as JSON array

我将数据存储在 MariaDB 的标准表中,但想 return 相关表中的记录作为 JSON 字符串。

我打算做的是有一个函数,我可以在其中传递 exerciseId 函数 return 是所有相关 exerciseMuscle 记录的 JSON 字符串,意思是每个 exercise 由存储过程编辑的 return 记录也可以包含来自子表的嵌套数据。

我已经能够使用 COLUMN_JSONCOLUMN_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"}