Количество и имена столбцов должны быть фиксированными во время подготовки запроса.Именно так работает SQL.
Итак, у вас есть два варианта решения этой проблемы.Оба варианта включают в себя написание кода приложения:
(1) Запросить отдельные значения из way
и затем написать код, чтобы использовать их для построения сводного запроса, добавив столько столбцов в 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`";
Теперь вы можете запустить новый запрос, и в нем будет столько столбцов, сколько количество различных значений way
.
$pivotstmt = $pdo->query($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"];
}
Теперь у вас естьмассив массивов, который выглядит так же, как если бы вы выполняли сводный запрос, но фактический SQL-запрос, который вы выполняли, был намного проще.Вы обработали результат запроса в другой набор массивов.