Jumlah dan nama kolom harus diperbaiki pada saat Anda menyiapkan kueri. Begitulah cara kerja SQL.
Jadi, Anda memiliki dua pilihan bagaimana menyelesaikannya. Kedua pilihan melibatkan penulisan kode aplikasi:
(1) Kueri nilai yang berbeda dari way
lalu tulis kode untuk menggunakannya untuk menyusun kueri pivot, menambahkan kolom dalam daftar SELECT sebanyak jumlah nilai yang berbeda.
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`";
Sekarang Anda dapat menjalankan kueri baru, dan kueri tersebut memiliki kolom sebanyak jumlah way
. yang berbeda nilai.
$pivotstmt = $pdo->query($pivotsql);
(2) Membuat kueri data baris demi baris seperti yang terstruktur dalam database Anda, lalu tulis kode untuk berporos ke dalam kolom sebelum Anda menampilkan 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"];
}
Sekarang Anda memiliki larik array yang terlihat sama seperti jika Anda menjalankan kueri pivot, tetapi SQL sebenarnya yang Anda jalankan jauh lebih sederhana. Anda memroses hasil kueri ke dalam kumpulan array yang berbeda.