O número e os nomes das colunas devem ser fixados no momento em que você prepara a consulta. É assim que o SQL funciona.
Então você tem duas opções de como resolver isso. Ambas as opções envolvem escrever o código do aplicativo:
(1) Consultar os valores distintos de
way
e, em seguida, escreva o código para usá-los para construir a consulta dinâmica, anexando tantas colunas na lista SELECT quanto o número de valores distintos. 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`";
Agora você pode executar a nova consulta, e ela tem tantas colunas quanto o número de
way
distintos valores. $pivotstmt = $pdo->query($pivotsql);
(2) Consultar os dados linha por linha como está estruturado em seu banco de dados e, em seguida, escreva o código para dinamizar as colunas antes de exibir os dados.
$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"];
}
Agora você tem uma matriz de matrizes que parece a mesma que se você tivesse executado uma consulta dinâmica, mas o SQL real que você executou era muito mais simples. Você pós-processou o resultado da consulta em um conjunto diferente de matrizes.