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 중국어 웹사이트의 기타 관련 기사를 참조하세요!