列の値が不明な場合に MySQL で動的クロス集計表を作成する方法

Susan Sarandon
リリース: 2024-10-28 08:36:29
オリジナル
525 人が閲覧しました

How to Create a Dynamic Cross Tabulation in MySQL When Column Values are Unknown?

MySQL の動的クロス集計

特定の列 (提供された例の「way」など) に未知の数の値を持つテーブルを扱う場合、 MySQL でのクロス集計は難しいように思えるかもしれません。従来のアプローチでは、クエリ時に列名を指定する必要がありますが、動的な状況では実現できない可能性があります。

ソリューション アプローチ

この課題に取り組むには、2 つのプログラムによるソリューションを採用できます。 :

1.個別の値のクエリとピボット クエリの構築

このアプローチには、不確実なカウントを持つ列の個別の値をフェッチすることが含まれます。この値のリストを使用すると、動的なピボット クエリを作成し、必要な列を SELECT ステートメントに追加できます。

<code class="sql">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`";</code>
ログイン後にコピー

2.行ごとにクエリを実行し、後処理でピボットを実行する

この代替方法には、データベース内で構造化されているデータを行ごとにクエリすることが含まれます。データを配列に収集し、それを表示する前に列にピボットします。

<code class="php">$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"];
}</code>
ログイン後にコピー

どちらのアプローチでも、列の数が不明な動的な状況に適応するコーディングが必要です。どのアプローチを選択するかは、特定のデータ操作要件と効率性の考慮事項によって異なります。

以上が列の値が不明な場合に MySQL で動的クロス集計表を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート