장바구니 또는 주문 시스템에서는 대체로 주문 기본 정보(주문 번호, 주문자 정보 등)를 저장하는 주문 테이블과 주문한 상품 목록을 저장하는 주문 상품 테이블로 나누어 구성합니다. 이렇게 두 개의 테이블로 나누어 저장하는 이유는 한 주문에 여러 상품을 주문할 수 있기 때문입니다.
요구사항
장바구니를 만들면서 구매상품테이블과 구매상품리스트 테이블 두개로 나눠서 만들고 있는데, 구매 상품테이블의 갯수를 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개로 제한되지만, 해당 주문에 포함된 상품 목록은 모두 검색됩니다.
함께보면 좋은 글
'Language > SQL' 카테고리의 다른 글
[MYSQL] 시간대별 방문자 통계 구하기 (0) | 2021.02.04 |
---|---|
[MYSQL] 다중테이블 JOIN문 쓰기 (0) | 2021.01.12 |
[MYSQL] 검색한결과 업데이트 하기 update, select (0) | 2021.01.04 |
[MYSQL] 쿼리문에서 NULL 값 체크 및 값 변경 (0) | 2021.01.04 |
[MYSQL] 여러테이블에서 검색한 결과 합치기 select * select (0) | 2021.01.04 |