MySQL 動的クロス集計
クロス集計クエリの列数が不明なシナリオでは、従来の MySQL クロス集計ソリューション不足する可能性があります。この記事では、この課題に取り組むための 2 つのアプローチについて説明します。
1.動的クエリ構築
このメソッドには、未知の列 (ウェイなど) の個別の値をフェッチし、適切な数の列を含むクエリを動的に構築することが含まれます。
$pdo->query("SELECT DISTINCT `way` FROM `MyTable`"); foreach ($rows 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`";
これこのアプローチでは、クエリを動的に構築するために追加のアプリケーション コードが必要ですが、複雑な SQL ステートメントが回避され、可変数の列をより柔軟に処理できます。
2.行ごとのピボット
または、データを行ごとにクエリし、アプリケーション コードでピボットを実行することもできます。
$stoparray = array(); foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) { $stopkey = $row["stop"]; if (!array_key_exists($stopkey, $stoparray)) { $stoparray[$stopkey] = array("stop"=>$stopkey); } $waykey = "way_" . $row["way"]; $stoparray[$stopkey][$waykey] = $row["time"]; }
このアプローチには、より多くの後処理が含まれます。アプリケーション内で使用できますが、データのピボット方法をより柔軟に行うことができます。
以上が列が不明な場合に MySQL でデータを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。