index 진입 시 로그인 여부에 상관없이 top제품을 표시하려고 한다.
조건:
상품+주문+후기 테이블 3개 단순히 join한 결과 후기건수가 정확히 합산되나
누적 주문량은 2배로 늘어나서 중복제거 위해 이중 select문 사용했다.
distinct도 고려했는데 쿼리가 간결해지지만 권장되진 않았다.
SELECT
o.product_code, p.pname, pimgStr, pprice, pdelifee, category,
COALESCE(reviewStats.reviewCount, 0) AS reviewCount,
totalQuantity
FROM
(SELECT
o.product_code,
SUM(o.pquantity) AS totalQuantity
FROM
ord o
WHERE
o.ostatus = '도착'
GROUP BY
o.product_code
) o
JOIN
products p ON o.product_code = p.product_code
LEFT JOIN
(SELECT
r.product_code,
COUNT(r.rid) AS reviewCount
FROM
review r
GROUP BY
r.product_code
) reviewStats ON o.product_code = reviewStats.product_code
ORDER BY
totalQuantity DESC, reviewCount DESC
LIMIT 4
top제품 4개만 보여드리면 아쉬우니까 카테고리도 출력!
@GetMapping("/index")
public String index(Model model) {
System.out.println("templates index + top제품");
//top제품 리스트
List<PrdVo> li = prdSvc.topPrd();
model.addAttribute("rcmList", li);
//카테고리 리스트
List<PrdVo> ctgrList = prdSvc.ctgrList();
model.addAttribute("ctgrList", ctgrList);
return "index";
}
사용자 로그인 성공 시에도 index로 보내기
if (authenticated) { //사용자 로그인 성공
session.setAttribute("username", username);
session.setAttribute("loginType", loginType);
System.out.println("사용자 로그인 성공: " + username+" / loginType: "+loginType);
return "redirect:/index";
}