首頁 >資料庫 >mysql教程 >如何在MySQL中動態建立交叉表?

如何在MySQL中動態建立交叉表?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 09:27:30789瀏覽

How to Dynamically Create Cross-Tabulated Tables in MySQL?

MySQL 動態交叉表

問題:

您有一個包含多個維度資料的表,並且您想要若要在不預先知道維數的情況下動態建立交叉表(資料透視表)。

解決方案:

必須定義資料透視查詢的列數在查詢準備時。要實現動態交叉表,您有兩個涉及編寫應用程式程式碼的選項:

選項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:逐行查詢與後處理資料

    選項2:逐行查詢及後處理資料
  1. 按原樣查詢資料。
使用第一個維度值(例如、「stop」)作為鍵。

使用包含第二維值(例如「way」)作為鍵、時間值作為值的子陣列填入陣列。

產生的陣列將類似於資料透視查詢中的資料。
<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn