🌊

PHPで動的なクロス集計ツールを作った時の反省

2021/12/24に公開

PHPで動的なクロス集計ツールを作った。

概要

MySQLにあるデータをクロス集計的に表示するツール。
なお、項目は動的に変わる。

処理の流れ

MySQLでselectした結果を配列に入れる
→配列でゴニョゴニョして各ユーザーの合計などを計算
→最終的にCSVで出力

苦労した点

集計するためにさらに配列などを作ったりして、処理の流れが自分でも追いづらくなった。
エラーがあっても、どこでバグっているのかわかりづらい。

改善するためには

MySQLでselectし、CASE式などを駆使して各ユーザーの合計などを計算
→最終的にCSVで出力
にすればよかった気がする。(当時はSQLのスキルが低かったためSQL文が思いつかなかった)
項目は動的に変わるが、SQL自体はPHPで動的に出力すれば良いと思う。

イメージは以下の通り。

$items = ['title','user_id','birth'];
$items_str = implode(",",$items);
$query = "select $items_str, FROM user";

追記

問題はそこではない。もっとデータに注目してクラスに分ければ良かった。
カプセル化しないで配列でやりとりしているからカオスになるのだ。
そうすれば改善されるはずだ

教訓

集計などはSQLに任せるべき。PHPでも出来ないことはないがカオスになりやすい。

Discussion