ホームページ > データベース > mysql チュートリアル > MySQL でクロス集計テーブルを動的に作成するにはどうすればよいですか?

MySQL でクロス集計テーブルを動的に作成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-29 09:27:30
オリジナル
799 人が閲覧しました

How to Dynamically Create Cross-Tabulated Tables in MySQL?

MySQL 動的クロスタブ

問題:

複数のディメンションを持つデータを含むテーブルがあり、事前にディメンションの数を知らなくても、クロス集計テーブル (ピボット テーブル) を動的に作成します。

解決策:

ピボット クエリの列の数を定義する必要があります。クエリの準備時に。動的クロス集計を実現するには、アプリケーション コードの記述を伴う 2 つのオプションがあります。

オプション 1: 個別の値をクエリして動的 SQL を構築する

  1. クエリピボットするディメンション内の個別の値 (例: "way")。
  2. 各個別のディメンション値の最大時間を表す SQL フラグメントの配列を作成します。
  3. SQL フラグメントを結合します。カンマを使用した単一のクエリ文字列。
  4. 構築された SQL 文字列を使用して動的ピボット クエリを実行します。

例:

<code class="php">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: データを行ごとにクエリおよび後処理します

  1. データをそのままクエリします。
  2. 最初の次元の値を使用して連想配列を作成します (例:
  3. 2 番目の次元の値 (例: "way") をキーとして、時間値を値として含むサブ配列を配列に入力します。
  4. 結果の配列は次のようになります。ピボット クエリのデータに似ています。

例:

<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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート