Počet a názvy sloupců musí být pevně stanoveny v době přípravy dotazu. Přesně tak SQL funguje.
Máte tedy dvě možnosti, jak to vyřešit. Obě možnosti zahrnují zápis kódu aplikace:
(1) Dotaz na odlišné hodnoty way
a poté napište kód, který je použije k vytvoření pivotního dotazu, a připojte tolik sloupců v seznamu SELECT, kolik je různých hodnot.
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`";
Nyní můžete spustit nový dotaz a má tolik sloupců, kolik je různých way
hodnoty.
$pivotstmt = $pdo->query($pivotsql);
(2) Dotazujte se na data řádek po řádku jak je strukturováno ve vaší databázi, a poté zapište kód, který se rozloží do sloupců, než zobrazíte 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"];
}
Nyní máte pole polí, které vypadá stejně, jako kdybyste spustili pivotní dotaz, ale skutečný SQL, který jste spustili, byl mnohem jednodušší. Výsledek dotazu jste následně zpracovali do jiné sady polí.