source

MariaDB/MySQL 선택 쿼리 ID의 json 배열을 연결된 값으로 바꿉니다.

nicesource 2022. 11. 5. 17:22
반응형

MariaDB/MySQL 선택 쿼리 ID의 json 배열을 연결된 값으로 바꿉니다.

데이터베이스 쿼리에 익숙하지 않지만 다음과 같은 태그 ID 열을 테이블에 저장했습니다.[1,6,8]그리고 나는 돌아오고 싶다"Music, Dance, Pop"예를 들어, 제가 선택한 쿼리에서요.

데이터베이스 스키마를 설계하지 않았으며 수정할 수 없습니다.

이렇게 하고 싶은 이유는 이 쿼리의 응답이 클라이언트에 직접 전송되어 테이블 렌더링이 이루어지기 때문입니다.또, 현재의 ORM 취득(PHP Laravel)에서는, 행 마다 같은 관련 모델을 취득하는데 오랜 시간이 걸립니다.그래서 이런 문의가 가능한지 알고 싶습니다.

스키마는 다음과 같습니다.

투고

id | name | ... | tag_ids (JSON array) | ...

태그

id | name

사용할까 생각 중입니다.JSON_REPLACE그러나 이 문제에 어떻게 접근해야 할지 전혀 알지 못합니다.결과를 후처리하는 코드가 없는 일반 SQL에서도 이것이 가능합니까?

수정할 수 없습니다.

이상적으로는 데이터를 정규화하는 것이 좋습니다.그러면 이 문제를 쉽게 처리할 수고를 덜 수고를 덜 수 있습니다.즉, JSON 함수의 도움을 받아 집약을 조합하여 결합을 시도할 수 있습니다.

SELECT
    p.id,
    p.name,
    GROUP_CONCAT(t.name) AS tag_names
FROM posts p
LEFT JOIN tags t
    ON JSON_SEARCH(p.tag_ids, 'one', t.id) IS NOT NULL
GROUP BY
    p.id,
    p.name;

데모

언급URL : https://stackoverflow.com/questions/57519025/mariadb-mysql-select-query-replace-json-array-of-ids-into-concatenated-values

반응형