”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 当列值未知时如何在 MySQL 中创建动态交叉表?

当列值未知时如何在 MySQL 中创建动态交叉表?

发布于2024-11-08
浏览:278

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

MySQL 中的动态交叉表

当处理特定列中具有未知数量值的表时(如提供的示例中的“way”),创建MySQL 中的交叉表似乎是一个挑战。传统的方法要求您在查询时指定列名,这在动态情况下可能不可行。

解决方案

为了应对这一挑战,可以采用两种编程解决方案:

1。查询不同值并构造枢轴查询

此方法涉及获取具有不确定计数的列的不同值。使用此值列表,您可以构建动态数据透视查询并将必要的列附加到 SELECT 语句中。

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`";

2.逐行查询和透视后处理

此替代方法涉及按数据库中的结构逐行查询数据。您将收集数组中的数据,然后将其旋转到列中,然后再显示它。

$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"];
}

这两种方法都需要编码以适应列数未知的动态情况。方法的选择将取决于具体的数据操作要求和效率考虑。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3