중복되는 값을 많은 순으로 뽑아오는 쿼리문 좀 알려주세요. 정보
중복되는 값을 많은 순으로 뽑아오는 쿼리문 좀 알려주세요.
본문
예를 들어서..
- 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 하겠습니다.
살려주십쇼!
댓글 전체

추가 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
부하가 심하니 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

오 감사합니다.
싹다끌어오는 미친짓을 할뻔 했습니다. ㅎㅎ
싹다끌어오는 미친짓을 할뻔 했습니다. ㅎㅎ

속도를 유지하면서 원하는 결과를 뽑는 방법은 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번 추천
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번 추천

성심껏 답해주셔서 감사드립니다.

1번이나 2번을 일정 시간마다 크론탭에 등록해서 html로 저장후 include 하세요 -0-;