반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 습윤밴드
- 박스점프
- wecode
- 활동 킬로칼로리
- github
- 위코드
- 메디패치
- MySQL
- dql
- 러닝
- axios
- 드림코딩
- dml
- JavaScript
- 크로스핏
- Udemy
- nodejs
- git
- Til
- express
- 달리기
- node.js
- 운동일지
- 홈트
- SQL
- 걷기
- 독서 리뷰
- node
- code kata
- 월별 운동일지
Archives
- Today
- Total
RISK IT
[TIL32_23.2.9] [1st-project] 상품 상세페이지 조회 SQL 쿼리문 작성 본문
반응형
작업 내용
제품 상세 페이지에 필요한 정보를 불러오는 쿼리문을 작성했다.
굉장히 많은 테이블의 조합이라서 쉽지 않은 작업이었다.
내가 할 수 있을까 하는 생각도 들고, 머리도 싸매면서 많은 시간을 들여서 작성했다.
그러다 원하는 결과가 마침내 나왔을 때의 쾌감 때문에 개발자를 하는 것 같다.
오늘 작성한 코드 중 제일 긴 쿼리문 하나.
⬇️ 제품 상세 페이지 조회 코드
SELECT
p.id,
sub_c.name AS sub_category,
sub_cat.name AS main_category,
p.name,
p.image_url,
p.description,
prod_f.feeling_of_use,
prod_s.scents,
p.main_ingredient,
p.ingredient,
prod_o.options,
prod_g.guides
FROM products p
INNER JOIN (
SELECT
sc.id,
sc.name
FROM sub_categories sc
) sub_c ON sub_c.id=p.sub_category_id
INNER JOIN (
SELECT
subc.id,
mc.name
FROM sub_categories subc
INNER JOIN main_categories mc ON mc.id=subc.main_category_id
) sub_cat ON sub_cat.id = p.sub_category_id
INNER JOIN (
SELECT
po.product_id,
JSON_ARRAYAGG(
JSON_OBJECT(
"size", po.size,
"price", po.price
)
) AS options
FROM product_options po
INNER JOIN products ON products.id = po.product_id
GROUP BY po.product_id
) prod_o ON p.id=prod_o.product_id
INNER JOIN (
SELECT
pps.product_id,
JSON_ARRAYAGG(ps.scent) AS scents
FROM products_product_scents pps
INNER JOIN product_scents ps ON ps.id=pps.product_scent_id
GROUP BY product_id
) prod_s ON p.id=prod_s.product_id
INNER JOIN (
SELECT
ppf.product_id,
JSON_ARRAYAGG(pf.name) AS feeling_of_use
FROM products_product_feelings ppf
INNER JOIN product_feelings pf ON pf.id=ppf.product_feeling_id
GROUP BY product_id
) prod_f ON p.id=prod_f.product_id
INNER JOIN (
SELECT
pg.product_id,
JSON_ARRAYAGG(
JSON_OBJECT(
"image_url", pg.image_url,
"usage_description", pg.usage_description,
"usage_amount", pg.usage_amount,
"texture", pg.texture
)
) AS guides
FROM product_guides pg
INNER JOIN products prod ON prod.id=pg.product_id
GROUP BY product_id
) prod_g ON p.id=prod_g.product_id
WHERE p.id=1;
참 길다..
지금까지는 INNER JOIN을 제대로 활용할 줄 몰라서 FROM에도 이런저런 데이터베이스가 많고 그랬는데, INNER JOIN을 활용하니까 내가 원하는 결과 값만 구할 수 있게 되었다.
이제는 저 쿼리문을 완전히 이해하고 쓸 수 있다는 점이 뿌듯하다~~
반응형
'IT > TIL' 카테고리의 다른 글
[TIL34_23.2.11] [1st-project] postman 갑자기 통신 안되는 에러 해결(router 순서 문제) (0) | 2023.02.11 |
---|---|
[TIL33_23.2.10] [1st-project] endpoint, query parameter (0) | 2023.02.11 |
[TIL31_23.2.8] [1st-project] 상품 조회 SQL 쿼리문 작성 (0) | 2023.02.11 |
[TIL30_23.2.7.] [1st-project] [Git&Github] PR 시 고려사항 (0) | 2023.02.08 |
[TIL29_23.2.6.] [1st-project] [Git&Github] 프로젝트 시작 시 clone 정리 (0) | 2023.02.07 |