>데이터 베이스 >MySQL 튜토리얼 >MySQL의 일대다 관계에서 중첩 JSON 개체를 생성하는 방법은 무엇입니까?

MySQL의 일대다 관계에서 중첩 JSON 개체를 생성하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-13 07:59:10122검색

How to Generate Nested JSON Objects from One-to-Many Relationships in MySQL?

MySQL 네이티브 JSON 함수를 사용하여 중첩 JSON 개체 생성

이 문서에서는 MySQL 버전 5.7.12의 기본 JSON 함수를 활용하여 중첩 JSON 개체를 생성하는 방법을 보여줍니다. 관계형에서 일대다 관계를 나타내는 JSON 문서 data.

문제 설명

부모-자식 관계를 나타내는 parent_table 및 child_table이라는 두 테이블이 주어지면 목표는 다음을 사용하여 JSON 문서를 생성하는 것입니다. 구조:

[
    {
        "id": 1,
        "desc": "parent row 1",
        "child_objects": [
            {
                "id": 1,
                "parent_id": 1,
                "desc": "child row 1"
            },
            {
                "id": 2,
                "parent_id": 1,
                "desc": "child row 2"
            }
        ]
    }
]

해결책

처음에는 단순 중첩 하위 쿼리를 사용하여 중첩 JSON 개체를 생성하려고 하면 MySQL이 상위 쿼리에서 단순 개체 쌍을 예상하기 때문에 오류가 발생했습니다. JSON 객체. 이 문제를 해결하기 위해 GROUP_CONCAT 함수를 활용하여 여러 하위 쿼리 결과를 단일 문자열로 연결한 다음 해당 결과를 JSON 배열로 변환합니다.

그러나 하위 쿼리 처리로 인해 결과 JSON 출력에는 이스케이프 문자가 포함됩니다. 문자열. 이 문제를 해결하기 위해 우리는 기본 쿼리의 연결에 의존하지 않고 CAST 및 CONCAT 함수를 사용하여 하위 쿼리에서 직접 JSON 배열을 생성합니다.

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',(select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(
                    'id',id,'parent_id',parent_id,'desc',`desc`)),
                ']')
         AS JSON) from child_table where parent_id = p.id)

 ) from parent_table p;

이 쿼리는 원하는 출력을 생성합니다.

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [{\"id\": 1, 
    \"desc\": \"child row 1\", 
    \"parent_id\": 1
    }, 
    {\"id\": 2, 
    \"desc\": \"child row 2\", 
    \"parent_id\": 1
    }]  
}'

위 내용은 MySQL의 일대다 관계에서 중첩 JSON 개체를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.