안녕하세요.
회원 구매 목록 테이블(table_a)이
id, user_id, item_id, date
이렇게 되어 있구요.
여기서 회원별 가장 최근 10개 구매 목록을 뽑아 새로운 테이블을 만들고 싶습니다.
어떻게 쿼리를 만들어야 할까요?
답변 감사드립니다.
그런데 원하는 결과는 전체 테이블에서 최근 10개 목록이 아니구요.
전체 테이블에서 회원마다 구매 목록이 있을 건데 그 목록에서 최근 10개를 추려내는 것이 필요합니다. user_id로 그룹을 묶은다음 처리해야 하는 건지 감이 잡히질 않네요 ^^;
끝에 조건절로 user_id를 지정해 주면 되지 않을 까 싶네요 어차피 쇼핑몰 로직이라면 남의 구매한 목록을 열람할 필요는 없으니까 기본적으로 user_id로 구분이 되어야 할것 같고요..
아, 내부적으로 통계를 위한 테이블을 만드는 건데요.
제 표현이 애매했네요. 모든 회원에 가장 최근 10개(최대) 구매목록 테이블. 이게 정확한 표현이겠네요.
t1 테이블 -------------------------------- id | user_id | item_id | date -------------------------------- 1 | userA | 포도 | .... 2 | userA | 사과 | .... 3 | userB | 딸기 | .... 4 | userA | 사과 | .... 5 | userA | 메론 | .... 6 | userC | 사과 | .... 7 | userA | 포도 | .... 8 | userB | 사과 | .... 9 | userA | 사과 | .... 10 | userB | 키위 | .... 11 | userA | 포도 | .... --------------------------------
select * from t1 where user_id='userA' order by date desc limit 10 ; -------------------------------- id | user_id | item_id | date -------------------------------- 1 | userA | 포도 | .... 2 | userA | 사과 | .... 4 | userA | 사과 | .... 5 | userA | 메론 | .... 7 | userA | 포도 | .... 9 | userA | 사과 | .... 11 | userA | 포도 | .... --------------------------------
select * from t1 where user_id='userB' order by date desc limit 10 ; -------------------------------- id | user_id | item_id | date -------------------------------- 3 | userB | 딸기 | .... 8 | userB | 사과 | .... 10 | userB | 키위 | .... --------------------------------
select * from t1 where user_id='userC' order by date desc limit 10 ; -------------------------------- id | user_id | item_id | date -------------------------------- 6 | userC | 사과 | .... --------------------------------
친절한 답변 정말 감사드립니다.
그런데 회원이 500만명 정도 되거든요.
그래서 일일이 쿼리문을 만들기엔 너무 많아 -_-; 한 쿼리로 모든 유저에 최근 10개 구입 목록을 얻어 새로운 테이블로 인서트 하는 방법이 있을까 하여 질문 올렸습니다.
해결 하셨나요? 아래 query를 활용하면 될 것 같네요.... SELECT table_a.* FROM table_aa LEFT OUTER JOIN table_a b ON (a.user_id = b.user_id AND a.m_date <= b.m_date) GROUP BY a.id,a.user_id,a.item_id,a.m_date HANVING COUNT(a.user_id) <= 10 ORER BY a.user_id ASC, a.m_date DESC; 그런데...양이 엄청나게 많다면....너무 느리겠져?