중복되는 값을 많은 순으로 뽑아오는 쿼리문 좀 알려주세요.
예를 들어서..
- A게시판에 a카테로리에 해당하는 글을 많이 등록한 10명을 뽑아서, 순서대로 레벨과 닉넴을 보여준다.
라고 할때..
뭔가 좋은 방법이 없을까요?
(게시물은 1만건이상, 회원은 10만건을 기준. - 뭐 그렇다고 치고....... ^^;;)
1. 싹다 끌어와서 array_unique로 복사해서, 루프돌려서 세어보고, 10명의 회원정보를 빼온다.
2. union all 로 일단 같이 끌어오고, 갯수를 세어본다.
이 두가지 밖에 생각이 안납니다. 돌려보니.. 부하가 심하더군요.
처리면에서, 비용이 가장 적게드는 놈으로 알려주시면, 너무나도 감사x2 하겠습니다.
살려주십쇼!
- A게시판에 a카테로리에 해당하는 글을 많이 등록한 10명을 뽑아서, 순서대로 레벨과 닉넴을 보여준다.
라고 할때..
뭔가 좋은 방법이 없을까요?
(게시물은 1만건이상, 회원은 10만건을 기준. - 뭐 그렇다고 치고....... ^^;;)
1. 싹다 끌어와서 array_unique로 복사해서, 루프돌려서 세어보고, 10명의 회원정보를 빼온다.
2. union all 로 일단 같이 끌어오고, 갯수를 세어본다.
이 두가지 밖에 생각이 안납니다. 돌려보니.. 부하가 심하더군요.
처리면에서, 비용이 가장 적게드는 놈으로 알려주시면, 너무나도 감사x2 하겠습니다.
살려주십쇼!
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 5개
부하가 심하니 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
싹다끌어오는 미친짓을 할뻔 했습니다. ㅎㅎ
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번 추천