第五回でほぼ全て実装しましたので今回はSql命令文を使って集計させます
(怒)動作を試すならここでやらないで!ソースを確認しましょう!変なログが記録されて迷惑!INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)を見ればわかると思いますが先にINSERTする項目を作ってあとで配列で置き換えているのでここにSql文入れてもfilenameにそのまま代入されちゃうのでSql文入れてもDBにそのままINSERTされると思いますよ。よく見て!
(Angry) Don’t do it here if you want to try it! Check the source! A strange log is recorded and annoying!If you look at INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time), you can see it, but since I made the item to be INSERTed first and replaced it with an array later, insert the Sql statement here However, since it will be assigned to filename as it is, I think that even if you enter a Sql statement, it will be inserted as it is in the DB. Look closely!
おばけが付近にいるか検索するAndroidアプリ「おばけスキャン」
↑別サーバーにジャンプさせてカウントを取るサンプル
<html> <head> <title>JivaGooAR</title> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <script> location.href = "https://play.google.com/store/apps/details?id=jp.dip.wspri.jivagoo "; </script> </head> <body> </body>
SAKURA(楽曲:mp3)
↑カウントテスト用(mp3ファイルをDL)
sql_counterのスクリプト圧縮ファイル
↑からmysqlDLカウンターPHPがDLできます。ダウンロード状況は以下で確認できます。:パスワードはwspri
セキュリティの関係でスクリプトが設置されたカレントから上位へ移動できてしまっていたのでファイル名にディレクトリパスを含められない&ディレクトリで上位に移動できないように修正しました。使用にあたっては設置カレントにDLディレクトリを作成してその中にファイルを設置するかもしくはその中にディレクトリを作成してご利用ください。
解説
$count_files = "SELECT filename, COUNT( filename ) FROM $tb_name GROUP BY filename"; $count_files=$db->query($count_files); $all="select count(id) from $tb_name"; $all=$db->query($all); foreach($all as $all_row){$all = $all_row[0];}
SELECT filename, COUNT( filename ) FROM $tb_name GROUP BY filenameでダウンロードされたファイル名とそのカウント数を得ています。
select count(id) from $tb_nameは全体のカウントを得ています。で、実行結果はオブジェクトで返ってきますのでループでカウントを抜き出しています。オブジェクトなのでそのままでは使えません。
全体のカウントを得たらDLファイル毎のカウントを割って全体の割合を出してグラフに反映させています。このやり方ならDL数が大きくなってもはみ出るようなことはありませんね。
//ファイル毎の集計を表示で出力 //テーブルタグHEADER echo (" <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\" align=\"center\" bgcolor=\"#336666\"> <tbody> <tr id=\"count_f\" style=\"display:''\"> <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">ダウウンロードファイル名</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">DL数</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">グラフ(全体の割合)</div></td></tr> "); foreach($count_files as $count_row){ echo(" <tr id=\"count_f\" style=\"display:''\"> <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\" width=\"200px\"><div style=\"font-size:10pt;\">".$count_row[0]."</div></td> <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\" width=\"50px\"><div style=\"font-size:10pt;\">".$count_row[1]."</div></td> <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\"><div style=\"background-color: blue; width: ".($count_row[1]/$all*100)."%; font-size: 10px;\"> </div></td></tr> "); } echo ("</tbody> </table>");
で、出力ですが、集計結果は消す必要がないのでそのまま一番上に出力しています。ファイル数が何百とかになるならその下の処理同様にCSSで送ることができますね。こんなもんでどうですか。次は最終回、WPプラグイン化しますね。