programing

MariaDb: 중첩 json 객체 쿼리를 만드는 방법

stoneblock 2023. 9. 6. 21:44

MariaDb: 중첩 json 객체 쿼리를 만드는 방법

MySql Select 쿼리에서 json 객체 배열을 생성하고 싶습니다.

아래와 같이 결과물을 반품하고 싶은 db 구조입니다.

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(6) unsigned NOT NULL,
  `name` varchar(255),
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `shops` (
  `id` int(6) unsigned NOT NULL,
  `name` varchar(255),
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

:: 업데이트 ::

우체부에서 반환되는 예상 JSON 출력:

{
    "data": [
        {
            "products": {
                "name": "product1"
            },
            "shops": {
                "name": "shop1"
            }
        }, 
        {
            "products": {
                "name": "product2"
            },
            "shops": {
                "name": "shop2"
            }
        }
    ]
}

동일한 내용을 검색했는데 제 주제와 관련된 결과가 나오지 않는데 마리아DB에서 위의 결과를 렌더링하기 위한 쿼리를 생성할 수 있나요?

추신: DB 버전

당신이 무엇을 구해야 하는지 나는 확실히 알 수 없지만,

다음은 먼저 시작해야 할 내용입니다.

SELECT CONCAT(
    '{"shops": [', 
    GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
    ']}'
)
FROM shop;

그러면 다음과 같은 결과가 나옵니다.

{"shops": [{"name": "shop 1"},{"name": "shop 2"},{"name": "shop 3"}]}

그러면 다음과 같은 작업을 수행할 수 있습니다.

SELECT CONCAT(
    '{',
    (SELECT CONCAT(
        '"shops": [', 
        GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
        ']'
    ) FROM shop),
    ',',
    (SELECT CONCAT(
        '"products": [', 
        GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
        ']'
    ) FROM product),
    '}'
);

이것은 다음과 같은 기스를 줄 것입니다.

{"shops": [{"name": "shop 1"},{"name": "shop 2"},{"name": "shop 3"}],"products": [{"name": "product 1"},{"name": "product 2"},{"name": "product 3"}]}

이제 원하는 출력을 얻기 위해 원하는 방식으로 이를 혼합할 수 있습니다.

다음은 한 가지 버전입니다.

SELECT CONCAT('{"data": [', GROUP_CONCAT(json, ""), ']}')
FROM (
    SELECT GROUP_CONCAT(CONCAT('{"shop": {"name": "', name, '"}}') separator ",") json
    FROM shop
    union all
    SELECT GROUP_CONCAT(CONCAT('{"product": {"name": "', name, '"}}') separator ",") json
    FROM product
) t;

다음을 생성합니다.

{"data": [{"shop": {"name": "shop 1"}},{"shop": {"name": "shop 2"}},{"shop": {"name": "shop 3"}},{"product": {"name": "product 1"}},{"product": {"name": "product 2"}},{"product": {"name": "product 3"}}]}

언급URL : https://stackoverflow.com/questions/62318063/mariadb-how-to-create-a-nested-json-object-query