[Wecode] Query문 blocker 해결

김택수·2022년 10월 20일
1

ORDER BY RAND()


사용이유

마켓컬리 클론코딩 프로젝트 중 상품추천해주는 캐러셀에 새로고침 후 계속 상품이 업데이트 되는 것을 구현하기 위해 랜덤한 상품을 Query문으로 뽑아서 프론트단에 전달해야하는 로직을 생각하게 됐음.

사용방법

Query문 내에서 ORDER BY RAND()를 통해 랜덤한 것들을 DB에서 SELECT 할 수 있고, 그것들의 갯수를 제한하는 LIMIT를 걸어 10개씩 나눠서 프론트단으로 데이터를 보내줄 수 있었음.

`
  SELECT
  p.name AS productName,
  p.thumnail_image_url AS thumbnailImageUrl,
  p.short_description AS shortDescription,
  p.price AS price
  FROM products AS p
  ORDER BY RAND()
  LIMIT 10;
  `

OFFSET, LIMIT & alias


사용이유

MD 추천 상품 캐러셀에 카테고리별로 6개의 상품이 들어가야 하기 때문에 Query문에서 갯수를 지정하여 프론트엔드단으로 데이터를 전송해야 할 상황이 생겼음.

사용방법

Query문 내에서 OFFSET(시작점)과 LIMIT(지정할 갯수)를 사용해주면 되는데, 유의할 점은 LIMIT이 먼저 나오고 그 다음 OFFSET이 나와야 작동한다는 점이다. 반대로 작성할 경우 Query문이 실행되지 않는다.

`
  SELECT
    p.name AS productName,
    p.thumnail_image_url AS thumbnailImageUrl,
    p.short_description AS shortDescription,
    p.price AS price
  FROM products AS p
  INNER JOIN sub_categories AS sc ON p.sub_category_id = sc.id
  INNER JOIN categories c ON sc.category_id = c.id
  WHERE c.id = ${categoriesId}
  LIMIT 6
  OFFSET 0
  `

추가적으로, INNER JOIN으로 JOIN할 Table을 불러온 후 뒤에 AS를 통해 alias 즉, 별명을 설정해줄 경우 그 다음부터는 별명으로만 작성해야 작동한다. 본래의 테이블명으로 작성하면 Table을 찾을 수 없다고 에러를 반환함.

profile
개발자 키우기 Lv1

0개의 댓글