programing

여러 COLUMN_JSON 결과를 JSON 어레이로 반환

firstcheck 2022. 10. 2. 23:02
반응형

여러 COLUMN_JSON 결과를 JSON 어레이로 반환

MariaDB의 표준 테이블에 데이터를 저장하고 있습니다만, 관련 테이블의 레코드를 JSON 문자열로 반환하고 싶습니다.

제가 하려고 하는 것은 제가 그 안에 들어갈 수 있는 기능을 가지고 있는 것입니다.exerciseId함수는 관련된 모든 JSON 문자열을 반환합니다.exerciseMuscle레코드, 즉 각 레코드exercise저장된 proc가 반환하는 레코드에는 하위 테이블에서 중첩된 데이터도 포함될 수 있습니다.

JSON 레코드를 생성할 수 있었습니다.COLUMN_JSON그리고.COLUMN_CREATE그러나 필요에 따라 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"}]

결과를 반복하지 않고 한 행에 여러 결과를 반환하고 수동으로 작성할 수 있습니까?를 추가하면group by그러면 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;

반품:

| id | musclesJson 
| 96 | {"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"}

언급URL : https://stackoverflow.com/questions/39943309/return-multiple-column-json-results-as-json-array

반응형