Project/영풍문고 리뉴얼
사은품명으로 사은품 이벤트 검색하기 | mysql, JSON_TABLE
yooputer
2024. 8. 29. 12:01
사은품 목록 조회 요건중 사은품명으로 사은품 이벤트를 검색하는 세부요건이 있었다.
테이블 구조는 아래와 같은데, free_gift_info에는 오른쪽과 같은 json 값이 담긴다.
사은품 정보가 json으로 담겨있기 때문에 이 json을 파싱하여 사은품 번호 리스트를 추출하고 사은품 테이블과 조인하여 사은품명을 조회해야 한다.
SELECT a.*
, fg.free_product_name
FROM
(SELECT ef.event_no,
ef.free_gift_info,
함께 조회해야하는 컬럼들
FROM 사은품이벤트 ef
WHERE 현재진행중인이벤트만) a
CROSS JOIN json_table(json_extract(free_gift_info, "$[*].freeProductNo"), '$[*]' columns(free_product_no BIGINT PATH '$')) b
INNER JOIN FREE_GIFT fg ON b.free_product_no = fg.free_product_no
WHERE fg.free_product_name LIKE CONCAT('%', 검색어 , '%')
GROUP BY event_no
사은품명 검색은 JSON_TABLE, JSON_EXTRACT함수를 사용하여 비용이 많이 들기 때문에,
일반적인 목록 조회 및 이벤트명 검색은 해당 함수를 사용하지 않는 쿼리를 사용하고
사은품명으로 검색하는 경우만 위의 쿼리를 사용하도록 분기처리하였다.