Notice
Recent Posts
Recent Comments
Link
Daniel's Knowledge Storage
인기검색어 퀄리 방법 본문
popular 테이블에 다음과 같이 데이타가 담겨 있습니다.
테이블을 만드는 방법부터는 쿼리문 답변을 한 후에 추가로 하겠습니다.
지금 예제에서는 IP 는 여기서 필요가 없어서 NULL로 생략했습니다.
mysql> SELECT * FROM popular;
+-------+--------------+------------+-------+
| pp_id | pp_word | pp_date | pp_ip |
+-------+--------------+------------+-------+
| 1 | keyword | 2008-10-29 | NULL |
| 2 | keyword | 2008-10-29 | NULL |
| 3 | coreanpro | 2008-10-28 | NULL |
| 4 | keyword | 2008-10-28 | NULL |
| 5 | naver | 2008-10-28 | NULL |
| 6 | perlmania | 2008-10-28 | NULL |
| 7 | perlmania | 2008-10-27 | NULL |
| 8 | perlmania | 2008-10-27 | NULL |
| 9 | naver | 2008-10-27 | NULL |
| 10 | mysql | 2008-10-27 | NULL |
| 11 | coreanpro | 2008-10-26 | NULL |
| 12 | perlmania | 2008-10-26 | NULL |
| 13 | perl | 2008-10-26 | NULL |
| 14 | sql | 2008-10-26 | NULL |
| 15 | sql | 2008-10-26 | NULL |
| 16 | sql | 2008-10-25 | NULL |
| 17 | naver.com | 2008-10-25 | NULL |
| 18 | perlmania | 2008-10-25 | NULL |
| 19 | linux kernel | 2008-10-25 | NULL |
| 20 | perlmania | 2008-10-25 | NULL |
| 21 | sql | 2008-10-25 | NULL |
| 22 | perlmania | 2008-10-24 | NULL |
| 23 | perlmania | 2008-10-24 | NULL |
| 24 | sql | 2008-10-24 | NULL |
| 25 | music list | 2008-10-24 | NULL |
| 26 | photoshop | 2008-10-24 | NULL |
| 27 | linux kernel | 2008-10-24 | NULL |
| 28 | keyword | 2008-10-29 | NULL |
| 29 | permania | 2008-10-29 | NULL |
| 30 | permania | 2008-10-29 | NULL |
| 31 | permania | 2008-10-29 | NULL |
| 32 | permania | 2008-10-29 | NULL |
| 33 | mysql | 2008-10-29 | NULL |
| 34 | mysql | 2008-10-29 | NULL |
| 35 | sql | 2008-10-29 | NULL |
| 36 | linux kernel | 2008-10-29 | NULL |
| 37 | photoshop | 2008-10-29 | NULL |
| 38 | photoshop | 2008-10-29 | NULL |
| 39 | keyword | 2008-10-28 | NULL |
| 40 | perlmania | 2008-10-28 | NULL |
| 41 | perlmania | 2008-10-28 | NULL |
| 42 | perlmania | 2008-10-28 | NULL |
| 43 | naver | 2008-10-28 | NULL |
| 44 | naver | 2008-10-28 | NULL |
| 45 | naver | 2008-10-27 | NULL |
| 46 | naver | 2008-10-27 | NULL |
| 47 | naver | 2008-10-27 | NULL |
| 48 | perlmania | 2008-10-27 | NULL |
| 49 | perlmania | 2008-10-27 | NULL |
| 50 | perlmania | 2008-10-27 | NULL |
| 51 | perl | 2008-10-27 | NULL |
| 52 | music list | 2008-10-27 | NULL |
| 53 | linux kernel | 2008-10-27 | NULL |
| 54 | linux kernel | 2008-10-27 | NULL |
| 55 | linux kernel | 2008-10-27 | NULL |
| 56 | perlmania | 2008-10-26 | NULL |
| 57 | perlmania | 2008-10-26 | NULL |
| 58 | mysql | 2008-10-26 | NULL |
| 59 | ruby | 2008-10-26 | NULL |
| 60 | ruby | 2008-10-26 | NULL |
| 61 | naver.com | 2008-10-26 | NULL |
| 62 | naver.com | 2008-10-25 | NULL |
| 63 | naver.com | 2008-10-25 | NULL |
| 64 | naver.com | 2008-10-25 | NULL |
| 65 | naver | 2008-10-25 | NULL |
| 66 | perl | 2008-10-25 | NULL |
| 67 | perl | 2008-10-25 | NULL |
| 68 | perlmania | 2008-10-25 | NULL |
| 69 | perlmania | 2008-10-25 | NULL |
| 70 | perlmania | 2008-10-25 | NULL |
| 71 | perlmania | 2008-10-25 | NULL |
| 72 | perlmania | 2008-10-25 | NULL |
| 73 | mysql | 2008-10-25 | NULL |
| 74 | perlmania | 2008-10-25 | NULL |
| 75 | perl | 2008-10-25 | NULL |
| 76 | perlmania | 2008-09-20 | NULL |
| 77 | perlmania | 2008-09-20 | NULL |
| 78 | perlmania | 2008-09-20 | NULL |
| 79 | naver | 2008-09-20 | NULL |
| 80 | perlmania | 2008-09-20 | NULL |
| 81 | naver | 2008-09-20 | NULL |
| 82 | perlmania | 2008-09-20 | NULL |
| 83 | perlmania | 2008-09-20 | NULL |
| 84 | mysql | 2008-09-20 | NULL |
| 85 | mysql | 2008-09-20 | NULL |
| 86 | mysql | 2008-09-20 | NULL |
| 87 | mysql | 2008-09-20 | NULL |
| 88 | mysql | 2008-09-20 | NULL |
| 89 | mysql | 2008-09-20 | NULL |
| 90 | mysql | 2008-09-20 | NULL |
| 91 | mysql | 2008-09-17 | NULL |
| 92 | naver.com | 2008-09-14 | NULL |
| 93 | naver.com | 2008-09-14 | NULL |
| 94 | perlmania | 2008-09-14 | NULL |
| 95 | perlmania | 2008-09-14 | NULL |
| 96 | mysql | 2008-10-10 | NULL |
| 97 | naver | 2008-10-10 | NULL |
| 98 | naver | 2008-10-10 | NULL |
| 99 | naver | 2008-10-10 | NULL |
| 100 | naver | 2008-10-10 | NULL |
| 101 | mysql | 2008-10-10 | NULL |
| 102 | mysql | 2008-10-10 | NULL |
| 103 | mysql | 2008-10-10 | NULL |
| 104 | naver | 2008-10-10 | NULL |
| 105 | naver | 2008-10-10 | NULL |
+-------+--------------+------------+-------+
105 rows in set (0.00 sec)
이중에서 일주일 내에 분량만 가져오려면 이렇게 합니다.
CURDATE() 는 현재 날짜를 반환하는 함수이고, 현재날짜-7 보다 pp_date 가 큰 경우만
가져오도록 조건을 답니다.
mysql> SELECT * FROM popular WHERE pp_date >= CURDATE()-7;
+-------+--------------+------------+-------+
| pp_id | pp_word | pp_date | pp_ip |
+-------+--------------+------------+-------+
| 1 | keyword | 2008-10-29 | NULL |
| 2 | keyword | 2008-10-29 | NULL |
| 3 | coreanpro | 2008-10-28 | NULL |
| 4 | keyword | 2008-10-28 | NULL |
| 5 | naver | 2008-10-28 | NULL |
| 6 | perlmania | 2008-10-28 | NULL |
| 7 | perlmania | 2008-10-27 | NULL |
| 8 | perlmania | 2008-10-27 | NULL |
| 9 | naver | 2008-10-27 | NULL |
| 10 | mysql | 2008-10-27 | NULL |
| 11 | coreanpro | 2008-10-26 | NULL |
| 12 | perlmania | 2008-10-26 | NULL |
| 13 | perl | 2008-10-26 | NULL |
| 14 | sql | 2008-10-26 | NULL |
| 15 | sql | 2008-10-26 | NULL |
| 16 | sql | 2008-10-25 | NULL |
| 17 | naver.com | 2008-10-25 | NULL |
| 18 | perlmania | 2008-10-25 | NULL |
| 19 | linux kernel | 2008-10-25 | NULL |
| 20 | perlmania | 2008-10-25 | NULL |
| 21 | sql | 2008-10-25 | NULL |
| 22 | perlmania | 2008-10-24 | NULL |
| 23 | perlmania | 2008-10-24 | NULL |
| 24 | sql | 2008-10-24 | NULL |
| 25 | music list | 2008-10-24 | NULL |
| 26 | photoshop | 2008-10-24 | NULL |
| 27 | linux kernel | 2008-10-24 | NULL |
| 28 | keyword | 2008-10-29 | NULL |
| 29 | permania | 2008-10-29 | NULL |
| 30 | permania | 2008-10-29 | NULL |
| 31 | permania | 2008-10-29 | NULL |
| 32 | permania | 2008-10-29 | NULL |
| 33 | mysql | 2008-10-29 | NULL |
| 34 | mysql | 2008-10-29 | NULL |
| 35 | sql | 2008-10-29 | NULL |
| 36 | linux kernel | 2008-10-29 | NULL |
| 37 | photoshop | 2008-10-29 | NULL |
| 38 | photoshop | 2008-10-29 | NULL |
| 39 | keyword | 2008-10-28 | NULL |
| 40 | perlmania | 2008-10-28 | NULL |
| 41 | perlmania | 2008-10-28 | NULL |
| 42 | perlmania | 2008-10-28 | NULL |
| 43 | naver | 2008-10-28 | NULL |
| 44 | naver | 2008-10-28 | NULL |
| 45 | naver | 2008-10-27 | NULL |
| 46 | naver | 2008-10-27 | NULL |
| 47 | naver | 2008-10-27 | NULL |
| 48 | perlmania | 2008-10-27 | NULL |
| 49 | perlmania | 2008-10-27 | NULL |
| 50 | perlmania | 2008-10-27 | NULL |
| 51 | perl | 2008-10-27 | NULL |
| 52 | music list | 2008-10-27 | NULL |
| 53 | linux kernel | 2008-10-27 | NULL |
| 54 | linux kernel | 2008-10-27 | NULL |
| 55 | linux kernel | 2008-10-27 | NULL |
| 56 | perlmania | 2008-10-26 | NULL |
| 57 | perlmania | 2008-10-26 | NULL |
| 58 | mysql | 2008-10-26 | NULL |
| 59 | ruby | 2008-10-26 | NULL |
| 60 | ruby | 2008-10-26 | NULL |
| 61 | naver.com | 2008-10-26 | NULL |
| 62 | naver.com | 2008-10-25 | NULL |
| 63 | naver.com | 2008-10-25 | NULL |
| 64 | naver.com | 2008-10-25 | NULL |
| 65 | naver | 2008-10-25 | NULL |
| 66 | perl | 2008-10-25 | NULL |
| 67 | perl | 2008-10-25 | NULL |
| 68 | perlmania | 2008-10-25 | NULL |
| 69 | perlmania | 2008-10-25 | NULL |
| 70 | perlmania | 2008-10-25 | NULL |
| 71 | perlmania | 2008-10-25 | NULL |
| 72 | perlmania | 2008-10-25 | NULL |
| 73 | mysql | 2008-10-25 | NULL |
| 74 | perlmania | 2008-10-25 | NULL |
| 75 | perl | 2008-10-25 | NULL |
+-------+--------------+------------+-------+
75 rows in set (0.00 sec)
한편, 전체 날짜 중에서 검색어가 입력된 회수는 다음과 같이 알 수 있습니다.
mysql> SELECT pp_word,COUNT(pp_word) FROM popular GROUP BY pp_word;
+--------------+----------------+
| pp_word | COUNT(pp_word) |
+--------------+----------------+
| coreanpro | 2 |
| keyword | 5 |
| linux kernel | 6 |
| music list | 2 |
| mysql | 17 |
| naver | 16 |
| naver.com | 7 |
| perl | 5 |
| perlmania | 30 |
| permania | 4 |
| photoshop | 3 |
| ruby | 2 |
| sql | 6 |
+--------------+----------------+
13 rows in set (0.00 sec)
이를 조합하면, 일주일 동안 검색어가 입력된 모든 회수를 구할 수 있습니다.
mysql> SELECT pp_word,COUNT(pp_word) FROM popular WHERE pp_date>=CURDATE()-7 GROUP BY pp_word;
+--------------+----------------+
| pp_word | COUNT(pp_word) |
+--------------+----------------+
| coreanpro | 2 |
| keyword | 5 |
| linux kernel | 6 |
| music list | 2 |
| mysql | 5 |
| naver | 8 |
| naver.com | 5 |
| perl | 5 |
| perlmania | 22 |
| permania | 4 |
| photoshop | 3 |
| ruby | 2 |
| sql | 6 |
+--------------+----------------+
13 rows in set (0.00 sec)
ORDER BY count DESC 를 더해서 인기 순으로 정렬합니다.
ORDER BY count 를 하면 ORDER BY count ASC 와 같고 오름차순으로 정렬됩니다.
여기서는 내림차순이므로 DESC 를 사용합니다.
mysql> SELECT pp_word AS keyword, COUNT(pp_word) AS count FROM popular WHERE pp_date>=CURDATE()-7 GROUP BY pp_word ORDER BY count DESC;
+--------------+-------+
| keyword | count |
+--------------+-------+
| perlmania | 22 |
| naver | 8 |
| sql | 6 |
| linux kernel | 6 |
| keyword | 5 |
| mysql | 5 |
| perl | 5 |
| naver.com | 5 |
| permania | 4 |
| photoshop | 3 |
| coreanpro | 2 |
| music list | 2 |
| ruby | 2 |
+--------------+-------+
13 rows in set (0.00 sec)
LIMIT 4 를 추가하여 4개만 가져옵니다.
mysql> SELECT pp_word AS keyword, COUNT(pp_word) AS count FROM popular WHERE pp_date>=CURDATE()-7 GROUP BY pp_word ORDER BY count DESC LIMIT 4;
+--------------+-------+
| keyword | count |
+--------------+-------+
| perlmania | 22 |
| naver | 8 |
| sql | 6 |
| linux kernel | 6 |
+--------------+-------+
4 rows in set (0.01 sec)
만약에 인기 수치를 가져오고 싶지 않다면 생략하는 것이 좋겠지요.
mysql> SELECT pp_word AS keyword FROM popular WHERE pp_date>=CURDATE()-7 GROUP BY pp_word ORDER BY COUNT(pp_word) DESC LIMIT 4;
+--------------+
| keyword |
+--------------+
| perlmania |
| naver |
| sql |
| linux kernel |
+--------------+
4 rows in set (0.00 sec)
음...
perlmania 가 1위군요... 후훗...
***************************************************************
'Develop > PHP' 카테고리의 다른 글
외부 smtp사용해서 메일 발송 (0) | 2009.08.31 |
---|---|
로그인 세션처리 (0) | 2009.08.31 |
mysql like 띄워쓰기 무시 (0) | 2009.08.28 |
mysql index 속도 높이기 (0) | 2009.06.15 |
검색 엔진이란? 검색엔진 쉽게 만들어 보기! - php기본 (0) | 2009.06.15 |
Comments