마켓컬리 클론코딩 프로젝트 중 상품추천해주는 캐러셀에 새로고침 후 계속 상품이 업데이트 되는 것을 구현하기 위해 랜덤한 상품을 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;
`
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을 찾을 수 없다고 에러를 반환함.