Wecode -기업협업 인턴 (부트캠프)/기업협업 독학, 공부

Query Builder (with 제품목록 페이지) **

JBS 12 2023. 11. 1. 13:11

상황에 맞춘 쿼리를 만들어주기 위해 사용 

 

때에 따라 쓰는 다른 쿼리문을 

api로 따로 하는게 아니라 

함수로 

 

ex. 제품목록 페이지 

SELECT name, prie, score, image

FROM products 

WHERE category id =2 

ORDER BY created at DESC 

 

카테고리가 2번인 것만 보여주고 싶어, 정렬을 최신순으로 

 

카테고리를 전체로 바꿨어 -> 쿼리문 바꿔야 해

 

검색창에 '가을'로 치면 -> 또 퀴리문 바꿔야 함 

WHERE product name LIKE %가을%

 

정렬을 가격순으로 

ORDER BY price DESC 

 

-> 매번 퀴리문 바뀔 수 없으니 

 


service.js

 

내가 정렬하고 싶은 키를 () 에 넣어둔다 

 

const ordering = async (sortBy) => { 

 

 

case문을 사용해서, 

 

 


Dao.js

ORDER BY o.price ASC, o.id AS ${orderingQuery} 

--> ${orderingQuery} 로 대체 

 

 

 

윗분에서 'orderingQuery'라는 문자열을 인자로 받아왔기 때문에! 

 

service.js에서 return으로 반환해줘서 

service.js에서는 
priceASC이냐 
priceDESC 이냐 
nameASC이냐
newest이냐에 따라서
(case문으로 나눠 써주었고)

dao.js에 들어가는
ordering 퀴리문이 바뀌어서 들어간다! 

그렇기 때문에. dao하나로도, 

퀴리문을 각각 적용가능하다


가격대를 설정 

5~15만원 사이 제품만 골라서 보여줘

 

SELECT products 

WHERE (o.price >= ${minPrice} AND o.price <$ {maxiPrice}) 

-> 이렇게 해도 되는데, mini, maxi에 들어오는 숫자가 undefined/null이 오는 경우에 sql syntax 에러가 남. 

0을 넣을 지언정, null이 들어가면 안 됨. 

애초에 들어갈 값이 없다면, 이 퀴리문을 쓰고 싶지 않아 

 

 

그래서 

SELECT products 

WHERE (o.price >= ${minPrice} AND o.price <$ {maxiPrice})