채택완료

인기검색어 쿼리질문입니다.

2016-12-20 (화) 17:37:34 5,411
Copy
SELECT pp_word, COUNT(*) AS cnt FROM g5_popular WHERE pp_date BETWEEN '20161213' AND '20161220' GROUP BY pp_word ORDER BY cnt DESC, pp_word LIMIT 0, 7

위의 쿼리는

lib.popular.php 에 있는 기존 쿼리인데요

이걸 실행하면 결과값이

pp_word 랑 cnt 두개 나오는데

pp_word 는 검색어 이고

cnt 는 몇번 검색되었는지 나타내는 임시 칼럼 아닌가요?

제가 이해한게 맞다면..

몇번을 검색해도 cnt 값이 안바뀌네요 ㅠㅠ

인기검색어 스킨을 네이버처럼 만들고 싶어서

이것저것 알아보고 있는데

역시나 쉬운건 하나도 없군요 ㅋㅋ

답변 3개 / 댓글 3개

채택된 답변
+20 포인트

>pp_word 는 검색어 이고

>cnt 는 몇번 검색되었는지 나타내는 임시 칼럼 아닌가요?

pp_word에 해당하는 단어가 위의 조건일자(BETWEEN '20161213' AND '20161220')에 몇번 검색되었는지를 카운트 하는 것입니다.

>제가 이해한게 맞다면..

>몇번을 검색해도 cnt 값이 안바뀌네요 ㅠㅠ

같은날 같은 IP로 같은 단어를 두번등록하지 못하도록 되어있습니다.

값이 바뀌는 것은 다음날 확인하시던가, 아니면 pp_ip 또는 pp_date를 달리하여 등록하셔어 조회카운트가 올라갑니다. 

그리고 ORDER BY cnt DESC, pp_word LIMIT 0, 7 는 검색이 많이된 검색어를 기준으로 7개 까지만 조회하라는 내용입니다.

답변에 대한 댓글 1개

같은날 같은 IP로 같은 단어를 두번등록하지 못하도록 되어있습니다.

이 조건 때문이였군요... ㅜ_ㅜ
혹시 이 조건을 없애려면 어떻게 해야하는지 여쭤봐도 될까요?

>혹시 이 조건을 없애려면 어떻게 해야하는지 여쭤봐도 될까요?  

popular 테이블에 다음 처럼 unique index가 설정되있습니다.

UNIQUE INDEX `index1` (`pp_date`, `pp_word`, `pp_ip`)

이 unique  index를 제거하신후

unique를 뺀 인덱스를 다음처럼 만들어 주시면 됩니다. 

​INDEX `index1` (`pp_date`, `pp_word`, `pp_ip`)

인덱스는 꼭 만들어 주셔야합니다.

만들지 않으면 데이타가 많아 질수록 속도가 느려집니다.

인덱스 제거와 생성방법은 검색사이트에서 조회하시면 많이 보실수있습니다.

mysql index 제거

mysql index 생성 

답변에 대한 댓글 1개

자세한 설명 감사드립니다~ㅎ

LIMIT 0,7 없애보세요.

검색어가 일치하지 않아서 낮은 검색어는 안보이는듯요..

Copy
SELECT pp_word, COUNT(*) AS cnt FROM g5_popular WHERE pp_date BETWEEN '20161213' AND '20161220' GROUP BY pp_word ORDER BY cnt DESC, pp_word
 

답변에 대한 댓글 1개

감사합니다 :D

답변을 작성하려면 로그인이 필요합니다.