やる夫たちの人狼村流石弟鯖のアイコン使用回数を調べるページを作成しました。
汝は人狼なりや? やる夫達の村 流石弟鯖専用アイコン使用回数検索
これは作成時のおおざっぱな記録です。
最初の方針
アイコンテーブルにあるもの:アイコンナンバー、アイコンファイル名、アイコン名
プレイヤーテーブルにあるもの:アイコンナンバー
使用回数を求めるにはプレイヤーテーブルにあるアイコンナンバーをgroup byすればいい。
ただしプレイヤーテーブルだけではアイコンファイル名とアイコン名がわからない。
またプレイヤーテーブルは村への参加記録なのでカウントの結果0が存在しない。
なのでアイコンテーブルとプレイヤーテーブルをアイコンナンバーをかすがいとして外部結合する。
アイコンテーブルを軸にするので未使用アイコンはNULLになるのでそこを0にする。
実際
アイコンテーブルとプレイヤーテーブルを外部結合しても未使用アイコンが表示されない。
プレイヤーテーブルのレコードが35000、アイコンテーブルのレコードが4400なので非常に処理が重い。
方針転換
まずアイコンテーブルからアイコンナンバー、アイコンファイル名、アイコン名をひっぱり、配列に突っ込む。
$array["number"]["number"]
$array["number"]["file"]
$array["number"]["name"]
次にプレイヤーテーブルからアイコンナンバーをgroup byしてcountをひっぱり、これを先に作った配列にやっぱり突っ込む。
$array["number"]["count"]
ちなみにあらかじめcountには0を入れておいて、プレイヤーテーブルにデータがないものにも対応。
後は表示用に整形するためにforeachを使って配列を回す。ここでifを使って上限下限の範囲内のみ表示する。
変えてみると
使用回数0回のもきっちり調べられる上データベースの処理に1分以上かかってたのが2,3秒で終わるものになった。
教訓
一回の複雑な命令でデータベースから完璧なデータを引っ張ってくるより、データベースは数回に分けても単純な命令ですませて、残りはPHPですませた方が楽で軽いこともある。
0 件のコメント:
コメントを投稿