MySQL动态交叉表
在交叉表查询列数未知的场景下,传统MySQL交叉表解决方案可能达不到要求。本文探讨了应对这一挑战的两种方法。
1.动态查询构造
此方法涉及获取未知列(例如,way)的不同值,然后动态构造具有适当数量列的查询:
$pdo->query("SELECT DISTINCT `way` FROM `MyTable`"); foreach ($rows 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`";
This方法需要额外的应用程序代码来动态构造查询,但它避免了复杂的 SQL 语句,并且可以更灵活地处理可变数量的列。
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"]; }
此方法涉及更多后处理在应用程序中,但它允许数据透视方式具有更大的灵活性。
以上是当列未知时如何动态透视 MySQL 中的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!