Language/SQL

[MYSQL] 테이블을 limit 만큼 검색(select)하여 join으로 해당 테이블 합치기 (장바구니)

멱군 2021. 1. 5. 17:58

장바구니 또는 주문 시스템에서는 대체로 주문 기본 정보(주문 번호, 주문자 정보 등)를 저장하는 주문 테이블과 주문한 상품 목록을 저장하는 주문 상품 테이블로 나누어 구성합니다. 이렇게 두 개의 테이블로 나누어 저장하는 이유는 한 주문에 여러 상품을 주문할 수 있기 때문입니다.

 

 

요구사항

장바구니를 만들면서 구매상품테이블과 구매상품리스트 테이블 두개로 나눠서 만들고 있는데, 구매 상품테이블의 갯수를 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