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함수를 사용하여 비용이 많이 들기 때문에, 

일반적인 목록 조회 및 이벤트명 검색은 해당 함수를 사용하지 않는 쿼리를 사용하고 

사은품명으로 검색하는 경우만 위의 쿼리를 사용하도록 분기처리하였다.