2016-10-09 2 views
1

MariaDB의 표준 테이블에 데이터를 저장하고 있지만 관련 테이블의 레코드를 JSON 문자열로 반환하고 싶습니다. 내가 할 의도가 무엇여러 개의 COLUMN_JSON 결과를 JSON 배열로 반환

내가 exerciseId 전달할 수 있고, 함수가 자식 테이블에서 중첩 된 데이터를 포함 할 수있는 저장된 프로 시저에 의해 반환 된 각 exercise 기록을 의미하는 모든 관련 exerciseMuscle 레코드 JSON 문자열을 반환 어디 기능을 가지고있다.

COLUMN_JSONCOLUMN_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

당신이 사용하고있는 MySQL의 버전? – Dez

+0

MariaDB 10.0.24, 방금 변경된 태그 – CrazyHorse

답변

2

필자가 필요로하는 것은 GROUP_CONCAT이었으며, 구분 기호로 쉼표를 지정했다.

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; 

반환 : 그래서 내 SQL을 변경

| id | musclesJson 
| 96 | {"role":"main","muscle":"biceps"},{"role":"secondary","muscle":"shoulders"} 
관련 문제