@Query(value="SELECT "
+ "new com.example.ballis.DTO.ProductNewDTO(prod.id, prod.productEngName, prod.dataStatus, prod.launchingDate, "
+ "img.imagePath, img.mainImageDiv, bd.brandName, sel.wishPrice, sel.inventoryDiv) "
+ "FROM Product prod "
+ "INNER JOIN Image img ON prod.id = img.targetId "
+ "INNER JOIN Brand bd ON prod.brand = bd.brandId "
+ "INNER JOIN Selling sel ON prod.id = sel.product "
+ "WHERE img.pageDiv = 1 AND img.mainImageDiv = 1 "
+ "ORDER BY prod.launchingDate DESC",
nativeQuery = false)
지금 이렇게 쓴 jpql의 쿼리로는 .. product id에 대해 group by 하지 않았기 때문에 같은 상품의 다른 가격, 다른 사이즈 등에 대해서 각각 다른 상품으로 인식하고 출력함.
그럼 group by로 product id에 대해서 묶으면? 그럼 각각 다른 정보를 가진 selling 테이블의 값들이 무시됨
결국 쿼리로 묶을수 없고 product id가 같은걸 이용해서 selling 테이블을 조회하는 방법 뿐?
지금 쿼리에서 이미지와 브랜드는 프로덕트랑 묶을수 있음. 유저 입력에 의해 바뀌지 않고 관리자가 상품을 등록할때 정해진것이므로...
상품목록을 띄울때 각 상품id를 fk로 가지는 selling 테이블의 데이터들(빠른배송여부, 판매가격, 즉시구매여부)를 띄워야함
findById로 하면 특정 id값들을 넣어줘야하는거아닌가?
상품 목록을 띄우고 (특정 order by 기준에 따라) 그때의 id 값을 받아온다..? 그리고 그 값을 findById로 selling 테이블의 데이터를 찾는다?
@Query(value="SELECT "
+ "new com.example.ballis.DTO.ProductNewDTO"
+ "(prod.id, prod.productEngName, img.imagePath, bd.brandName, "
+ "sel.wishPrice, sel.inventoryDiv) "
+ "FROM Product prod "
+ "INNER JOIN Image img ON prod.id = img.targetId "
+ "INNER JOIN Brand bd ON prod.brand = bd.brandId "
+ "INNER JOIN Selling sel ON prod.id = sel.product "
+ "WHERE img.pageDiv = 1 AND img.mainImageDiv = 1 AND prod.dataStatus = 1 "
+ "AND sel.wishPrice = ("
+ "SELECT MIN(wishPrice) "
+ "FROM Selling "
+ "WHERE product = prod.id) "
+ "ORDER BY prod.launchingDate DESC",
nativeQuery = false)
서브쿼리를 쓰니 selling 테이블에서 원하는 데이터(가장 낮은 가격)를 가진 행의 전체를 가져올수 있었음
group by로는 불가능!