Liczba i nazwy kolumn muszą być ustalone podczas przygotowywania zapytania. Tak po prostu działa SQL.
Masz więc dwie możliwości rozwiązania tego problemu. Obie opcje obejmują pisanie kodu aplikacji:
(1) Zapytanie o odrębne wartości way
a następnie napisz kod, który użyje ich do skonstruowania zapytania przestawnego, dołączając tyle kolumn na liście SELECT, ile jest odrębnych wartości.
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`";
Teraz możesz uruchomić nowe zapytanie, które ma tyle kolumn, ile jest różnych way
wartości.
$pivotstmt = $pdo->query($pivotsql);
(2) Zapytanie o dane wiersz po wierszu zgodnie ze strukturą w bazie danych, a następnie napisz kod, który będzie przestawiany na kolumny przed wyświetleniem danych.
$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"];
}
Teraz masz tablicę tablic, która wygląda tak samo, jak po uruchomieniu zapytania przestawnego, ale rzeczywisty kod SQL, który uruchomiłeś, był znacznie prostszy. Przetworzyłeś wynik zapytania do innego zestawu tablic.