首页 >数据库 >mysql教程 >如何在MySQL中动态创建交叉表?

如何在MySQL中动态创建交叉表?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-29 09:27:30861浏览

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:逐行查询和后处理数据

  1. 按原样查询数据。
  2. 使用第一个维度值(例如、“stop”)作为键。
  3. 使用包含第二维值(例如“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn