MySQLで記事のアクセス分析

MovableTypeで運用しているウェブログの記事のアクセス分析。

今までウェブプログラミングをしていて、データをテキストから取り出し、forやwhileで繰り返し処理をしながら、集計や並べ替えをしていたのですが、SQLを使うとそれらが簡単にできてしまうんです。

一応、情報技術者試験の時に勉強したのですが、そのときは具体的な目的はなかったので、詰め込みの勉強をしただけでした。こうして利用してみると、SQLの知識はデータ活用を大きく変えるものだと思いました。

さて、具体的にどのように処理したかを説明します。

やりたいことは、記事ごとのカウントをしているデータから、
カテゴリ別の集計をおこないます。カウントしているデータは、
シンプルにしてあるので、カテゴリ情報は含まれていません。
エントリとカテゴリの関連付けは、mt_placementに保存してありました。

SELECT placement_category_id,
count(*) as count, sum(mt_most_views.views) as sum
FROM mt_placement left join mt_most_views
ON mt_placement.placement_entry_id = mt_most_views.id
WHERE mt_placement.placement_is_primary = 1
AND mt_placement.placement_blog_id = $blogid
GROUP BY mt_placement.placement_category_id
ORDER BY sum DESC

「SELECT」でカテゴリIDとカテゴリIDの数と閲覧数の合計を取り出す。
「FROM」で「mt_placement」というテーブルから取り出すのですが、
そのテーブルは、「mt_most_views」と連結させてあり、
「mt_placement」テーブルの「placement_entry_id」と
「mt_most_views」テーブルの「id」を関連づけてあります。
「placement_is_primary」は「主カテゴリ」かどうかが保存してあって
これが 1 だと「主カテゴリ」ということです。
「mt_placement.placement_blog_id」には、ブログIDが保存してあって、
これが呼び出されるブログIDと一致しているかを調べます。
「GROUP BY」は、どの要素で集計するかということで、
カテゴリIDでまとめるようにしてあります。
最後に「ORDER BY」でソートしています。

説明すると長いのですが、SQLなしのperlやPHPだけで処理しようとすると
何倍の行数になることか...。

エクセルでごちゃごちゃ数式を書いているのと
アクセスでスマートにデータベースで処理しているのと同じです。

完成品は後日公開します。
(動作中のものは「全記事」にあります)

« アプリケーションのアイコン | RSS Validator »
リンクソース
■記事用リンクソース:

■Wiki用リンクソース(PukiWiki):

■Wiki用リンクソース(MediaWiki):

■短縮URL: