MySQL 動的クロス集計
問題:
「」のような属性を含むテーブルを考えてみましょう。 「道」「停留所」「時間」。目的は、このデータをクロス集計形式に変換することであり、列は個別の「ウェイ」値を表し、行は「ストップ」値を表します。各セルには、対応する「ウェイ」と「停留所」の組み合わせで記録された最大「時間」が含まれています。
動的ソリューション:
MySQL の制限により、列名と番号が決まります。クエリの実行中に修正する必要があります。この課題を克服するには、次の 2 つのアプリケーション ベースのアプローチを検討してください。
オプション 1: 個別の値をクエリする
オプション 2: 行ごとの処理
実装:
オプション 1 の場合:
$way_array = []; foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) { $way = (int) $row["way"]; $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way"; } $pivotsql = "SELECT stop, " . join(", ", $way_array) . "FROM `MyTable` GROUP BY `stop`"; $pivotstmt = $pdo->query($pivotsql);
オプション 2 の場合:
$stoparray = []; foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) { $stopkey = $row["stop"]; if (!array_key_exists($stopkey, $stoparray)) { $stoparray[$stopkey] = ["stop"=>$stopkey]; } $waykey = "way_" . $row["way"]; $stoparray[$stopkey][$waykey] = $row["time"]; }
以上がMySQL でさまざまな列名を持つクロス集計表を動的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。