Rumah > Artikel > pangkalan data > Bagaimana untuk Membuat Penjadualan Silang secara Dinamik dalam MySQL dengan Nama Lajur yang Berbeza-beza?
MySQL Dynamic Cross Tabulation
Masalah:
Pertimbangkan jadual yang mengandungi atribut seperti " cara," "berhenti," dan "masa." Objektifnya adalah untuk mengubah data ini menjadi format jadual silang, dengan lajur mewakili nilai "jalan" yang berbeza dan baris mewakili nilai "berhenti". Setiap sel mengandungi "masa" maksimum yang direkodkan untuk gabungan "cara" dan "berhenti" yang sepadan.
Penyelesaian Dinamik:
Penghadan MySQL menentukan nama lajur dan nombor mesti diperbaiki semasa pelaksanaan pertanyaan. Untuk mengatasi cabaran ini, pertimbangkan dua pendekatan berasaskan aplikasi:
Pilihan 1: Nilai Berbeza Pertanyaan
Pilihan 2: Pemprosesan Baris demi Baris
Pelaksanaan:
Untuk Pilihan 1:
$way_array = []; 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`"; $pivotstmt = $pdo->query($pivotsql);
Untuk Pilihan 2:
$stoparray = []; foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) { $stopkey = $row["stop"]; if (!array_key_exists($stopkey, $stoparray)) { $stoparray[$stopkey] = ["stop"=>$stopkey]; } $waykey = "way_" . $row["way"]; $stoparray[$stopkey][$waykey] = $row["time"]; }
Atas ialah kandungan terperinci Bagaimana untuk Membuat Penjadualan Silang secara Dinamik dalam MySQL dengan Nama Lajur yang Berbeza-beza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!