1차 프로젝트 - 쿼리문.

이상엽·2022년 8월 27일

메인페이지 쿼리문.

메인페이지에는 단품들과 세트상품들이 각 카테고리에 해당되는 상품들의 데이터를 다져와야한다.

아래 코드는 단품 테이블과 세트 테이블을 UNION으로 합치는 쿼리문이다.

        `SELECT  
              p.name,
              p.size, 
              pi.url,
              p.price
          FROM products p
          INNER JOIN products_images pi ON p.product_image_id = pi.id
          WHERE name LIKE '%퍼퓸' 
          UNION
          
          SELECT  
              pg.name,
              pg.size,
              pi.url,
              pg.price
          FROM products_groups pg
          INNER JOIN products_images pi ON pg.product_group_image_id = pi.id
          

사용시 세트 테이블은 size가 필요없으나 위의 컬럼을 맞추기 위해 추가됨에 따라 불필요한 컬럼이 발생하였고 그를 수정하기 위해 JSON_ARRAYAGG, JSON_OBJECT를 사용하였다.

        `SELECT  
        category.category_description,
        (SELECT
                    JSON_ARRAYAGG(JSON_OBJECT(
                      "name", p.name,
                      "id", p.id,
                      "size", p.size, 
                      "url", pi.url
                      )) JSON  FROM products p
                  INNER JOIN products_images pi ON p.product_image_id = pi.id
                  WHERE p.name LIKE '${categoryStr}%' 
                )  product,
        (SELECT
                    JSON_ARRAYAGG(JSON_OBJECT(
                      "name", pg.name,
                      "setId", pg.id,
                      "url", pi.url
                      )) JSON  FROM products_groups pg
                  INNER JOIN products_images pi ON pg.product_group_image_id = pi.id
                  WHERE pg.name LIKE '${categoryStr}%' 
                ) setProduct
        from category
        WHERE category.name = '${categoryStr}';
         

로 변경 하지만 변경시 products라는 키에 모든 나머지 요소가 값으로 입력되어 출력되어 Service 단에서 출력되는 정보를 한 번 가공해준다.

  for (const productCategory of productCategoryList) {
    productCategory.product = JSON.parse(productCategory.product)
    productCategory.setProduct = JSON.parse(productCategory.setProduct);
  }

를 추가함으로 JSON스트링을 JSON.parse 매서드를 사용하요 문자열화하여 출력한다.

profile
코딩바보에서 시작하기

0개의 댓글