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

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

Mary-Kate Olsen
发布: 2024-10-29 09:27:30
原创
824 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板