database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29230 게시물 읽기
No. 29230
회원별 최근 10개 레코드
작성자
길동
작성일
2009-08-29 04:43
조회수
6,863

안녕하세요.

 

회원 구매 목록 테이블(table_a)이

id, user_id, item_id, date

이렇게 되어 있구요.

여기서 회원별 가장 최근 10개 구매 목록을 뽑아 새로운 테이블을 만들고 싶습니다.

어떻게 쿼리를 만들어야 할까요?

 

이 글에 대한 댓글이 총 7건 있습니다.
date 필드를 기준으로 하거나 id 번호가 auto_increment 로 증가되는 고유의 수라면
id 필드를 desc로 정렬을 하신 후에 limit 10 열개만 가져와서 뿌려 주시면 될듯 하네요

비슷한 예제 링크입니다.
http://www.inibrain.com/qnaView.action?bbs.bbs_seq=360&page=1
김두형(SQLdic)님이 2009-08-31 10:56에 작성한 댓글입니다.

답변 감사드립니다.

그런데 원하는 결과는 전체 테이블에서 최근 10개 목록이 아니구요.

전체 테이블에서 회원마다 구매 목록이 있을 건데 그 목록에서 최근 10개를 추려내는 것이 필요합니다. user_id로 그룹을 묶은다음 처리해야 하는 건지 감이 잡히질 않네요 ^^;

길동님이 2009-09-01 04:29에 작성한 댓글입니다. Edit

끝에 조건절로 user_id를 지정해 주면 되지 않을 까 싶네요
어차피 쇼핑몰 로직이라면 남의 구매한 목록을 열람할 필요는 없으니까
기본적으로 user_id로 구분이 되어야 할것 같고요..

김두형(SQLdic)님이 2009-09-01 09:27에 작성한 댓글입니다.

아, 내부적으로 통계를 위한 테이블을 만드는 건데요.

제 표현이 애매했네요. 모든 회원에 가장 최근 10개(최대) 구매목록 테이블. 이게 정확한 표현이겠네요.

 

 

길동님이 2009-09-02 04:49에 작성한 댓글입니다. Edit

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    | 사과    | ....
--------------------------------

 

김두형(SQLdic)님이 2009-09-02 09:16에 작성한 댓글입니다.

친절한 답변 정말 감사드립니다.

그런데 회원이 500만명 정도 되거든요.

그래서 일일이 쿼리문을 만들기엔 너무 많아 -_-; 한 쿼리로 모든 유저에 최근 10개 구입 목록을 얻어 새로운 테이블로 인서트 하는 방법이 있을까 하여 질문 올렸습니다.

 

길동님이 2009-09-02 09:24에 작성한 댓글입니다. Edit

해결 하셨나요?
아래 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;


그런데...양이 엄청나게 많다면....너무 느리겠져?

김지숙(koyoro)님이 2009-09-08 20:37에 작성한 댓글입니다.
이 댓글은 2009-09-08 20:42에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
29233stored proc 사용시 cursor 에 관하여 [1]
아이오
2009-08-31
6925
29232mysqldump 로 백업 시 foreign key 구문이 빠집니다. ㅡㅡ;;
김상묵
2009-08-31
5712
29231innodb질문입니다 [1]
qordudwls
2009-08-31
7024
29230회원별 최근 10개 레코드 [7]
길동
2009-08-29
6863
29229데이터베이스 초보자 문의 드립니다. (join) [1]
강민정
2009-08-28
5487
29228그룹중 최신자료보기 [3]
어머나
2009-08-27
5762
29227myisam 조인에 있어서 궁금한 점이 있습니다. [1]
이호종
2009-08-27
6423
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다