Antalet och namnen på kolumner måste fastställas när du förbereder frågan. Det är precis så SQL fungerar.
Så du har två val för hur du ska lösa detta. Båda valen innebär att du skriver applikationskod:
(1) Fråga de distinkta värdena av way
och skriv sedan kod för att använda dessa för att konstruera pivotfrågan, lägg till lika många kolumner i SELECT-listan som antalet distinkta värden.
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`";
Nu kan du köra den nya frågan, och den har lika många kolumner som antalet distinkta way
värden.
$pivotstmt = $pdo->query($pivotsql);
(2) Fråga data rad för rad som den är strukturerad i din databas och skriv sedan kod för att pivotera in i kolumner innan du visar data.
$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"];
}
Nu har du en array av arrayer som ser ut som om du hade kört en pivotfråga, men den faktiska SQL du körde var mycket enklare. Du efterbehandlade frågeresultatet till en annan uppsättning arrayer.