[MYSQL] 테이블을 limit 만큼 검색(select)하여 join으로 해당 테이블 합치기 (장바구니)
장바구니 또는 주문 시스템에서는 대체로 주문 기본 정보(주문 번호, 주문자 정보 등)를 저장하는 주문 테이블과 주문한 상품 목록을 저장하는 주문 상품 테이블로 나누어 구성합니다. 이렇게 두 개의 테이블로 나누어 저장하는 이유는 한 주문에 여러 상품을 주문할 수 있기 때문입니다.
요구사항
장바구니를 만들면서 구매상품테이블과 구매상품리스트 테이블 두개로 나눠서 만들고 있는데, 구매 상품테이블의 갯수를 10개만큼 찾고, 그 하위에 해당하는 구매물품을 출력하려고 한다.
생각해보기
limit를 쓰면 될거 같았는데 뒤에다 붙이면 전체 검색 수가 10개가 나오니 원래 하려던 구매물품 리스트를 10개만 검색하고, 그 뒤에 구매물품테이블을 붙이면(join) 될거 같다.
해결방법
데이터베이스 테이블 구조
- orders (주문 기본 정보 테이블)
- idx (주문 번호)
- user_id (주문자 아이디)
- order_date (주문 날짜)
- ... (기타 필요한 칼럼)
- order_items (주문 상품 목록 테이블)
- idx (주문 상품 아이템 번호)
- order_idx (주문 번호 - orders 테이블의 idx와 연결)
- product_name (상품 이름)
- quantity (수량)
- ... (기타 필요한 칼럼)
쿼리 작성
SELECT *
FROM (
select *
from tablelist AS aa
ORDER BY aa.idx DESC LIMIT 10 ) AS A
JOIN table AS B ON A.idx = B.idx
해설
서브쿼리 활용
먼저 orders 테이블에서 최근 주문 10건을 가져오기 위해 서브쿼리를 활용합니다.
JOIN
orders 테이블의 주문 번호(idx)와 order_items 테이블의 주문 번호(order_idx)를 기준으로 두 테이블을 JOIN합니다. 이렇게 하면 최근 주문 10건에 해당하는 모든 주문 상품 목록을 한 번에 가져올 수 있습니다.
결론
이 방식을 사용하면 원하시는 것처럼 주문 목록은 10개로 제한되지만, 해당 주문에 포함된 상품 목록은 모두 검색됩니다.
함께보면 좋은 글
[MYSQL] 다중테이블 JOIN문 쓰기
데이터베이스 내의 여러 테이블에서 필요한 데이터를 추출하려면 JOIN 연산을 활용해야 합니다. MYSQL에서는 여러 테이블을 한 번에 JOIN하여 원하는 결과를 얻는 것이 가능합니다. 이를 통해 효율
devit.koreacreatorfesta.com
[MYSQL] 시간대별 방문자 통계 구하기
웹사이트나 앱에서 사용자의 방문 패턴을 파악하는 것은 중요합니다. 특히 어느 시간대에 사용자들이 가장 활발히 활동하는지, 혹은 방문하지 않는지를 알아내는 것은 서비스 운영에 있어 큰
devit.koreacreatorfesta.com