중복되는 값을 많은 순으로 뽑아오는 쿼리문 좀 알려주세요.

· 2010-12-07 (화) 20:09:23 · 1720 · 5
예를 들어서..

- A게시판에 a카테로리에 해당하는 글을 많이 등록한 10명을 뽑아서, 순서대로 레벨과 닉넴을 보여준다.

라고 할때..
뭔가 좋은 방법이 없을까요?
(게시물은 1만건이상, 회원은 10만건을 기준. - 뭐 그렇다고 치고....... ^^;;)

1. 싹다 끌어와서 array_unique로 복사해서, 루프돌려서 세어보고, 10명의 회원정보를 빼온다.
2. union all 로 일단 같이 끌어오고, 갯수를 세어본다.
이 두가지 밖에 생각이 안납니다. 돌려보니.. 부하가 심하더군요.

처리면에서, 비용이 가장 적게드는 놈으로 알려주시면, 너무나도 감사x2 하겠습니다.
살려주십쇼!
|

댓글 5개

추가 DB를 구성하지 않는 한 아래의 방법밖에 없습니다.
부하가 심하니 DB-cache 를 이용하세요. 10분에 한번이나 1시간에 한번 실행되는게 좋습니다.

SELECT a.`mb_id` , count(a.`mb_id`) as `cnt` , b.`mb_name` , b.`mb_level`
FROM `g4_write_free` a
INNER JOIN `g4_member` b ON a.`mb_id` = b.`mb_id`
WHERE a.`ca_name` = '잡담'
GROUP BY a.`mb_id` , b.`mb_name` , b.`mb_level`
ORDER BY `cnt` DESC
LIMIT 0 , 10
2010-12-08 (수) 09:51:57
오 감사합니다.
싹다끌어오는 미친짓을 할뻔 했습니다. ㅎㅎ
2010-12-07 (화) 20:41:13
속도를 유지하면서 원하는 결과를 뽑는 방법은 3가지 정도
1. select userid, category, count(userid) from A게시판
group by category, userid
having count(userid) > 10 --적어도 2번이상 글쓴사람
(쿼리는 생각난대로 쓴거라서 정상동작하지 않을것입니다. 대략 이련형태)
- count 별로 소팅하여 위에서 10개 출력
- category 테이블에 index 추가
- userid,category를 묶어서index 추가(순서는 반대일지도 모름)

2. g4_board_new 테이블에서 category 필드를 추가한다음
- 신규글이 등록되었을때 category 도 update되도록 그누보드수정
- 위와 비슷한 형태로 query

3. 중간 테이블을 별도로 생성하여 한번씩 delete all, insert 를 해줌
- 1번이나 2번을 통하여 개인별,게시판별, 카테고리별 개수를 하루에 한번정도 update

속도에 민감하다면, 3번 추천
2010-12-08 (수) 09:52:18
성심껏 답해주셔서 감사드립니다.
1번이나 2번을 일정 시간마다 크론탭에 등록해서 html로 저장후 include 하세요 -0-;
댓글을 작성하시려면 로그인이 필요합니다.

그누4 질문답변

66,531건

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기 기존 게시물은 열람만 가능합니다.

+
제목 글쓴이 날짜 조회
10-12-07 조회 938
10-12-07 조회 792
10-12-07 조회 1,721
10-12-07 조회 759
10-12-07 조회 858
10-12-07 조회 837
10-12-07 조회 1,065
10-12-07 조회 826
10-12-07 조회 997
10-12-07 조회 842
10-12-07 조회 3,064
10-12-07 조회 990
10-12-07 조회 827
10-12-07 조회 1,074
10-12-07 조회 996
10-12-07 조회 1,622
10-12-07 조회 1,621
10-12-07 조회 1,001
10-12-07 조회 1,096
10-12-07 조회 1,311