Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Membuat Tabulasi Salib Dinamik dalam MySQL Apabila Nilai Lajur Tidak Diketahui?

Bagaimana untuk Membuat Tabulasi Salib Dinamik dalam MySQL Apabila Nilai Lajur Tidak Diketahui?

Susan Sarandon
Susan Sarandonasal
2024-10-28 08:36:29435semak imbas

How to Create a Dynamic Cross Tabulation in MySQL When Column Values are Unknown?

Dynamic Cross Tabulation in MySQL

Apabila berurusan dengan jadual dengan bilangan nilai yang tidak diketahui dalam lajur tertentu (seperti "cara" dalam contoh yang disediakan), mencipta penjadualan silang dalam MySQL boleh kelihatan seperti satu cabaran. Pendekatan konvensional memerlukan anda untuk menentukan nama lajur pada masa membuat pertanyaan, yang mungkin tidak boleh dilaksanakan dalam situasi dinamik.

Pendekatan Penyelesaian

Untuk menangani cabaran ini, dua penyelesaian terprogram boleh digunakan :

1. Query Distinct Values ​​and Construct Pivot Query

Pendekatan ini melibatkan pengambilan nilai berbeza lajur dengan kiraan yang tidak pasti. Menggunakan senarai nilai ini, anda boleh membina pertanyaan pangsi dinamik dan menambah lajur yang diperlukan pada penyataan SELECT anda.

<code class="sql">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`";</code>

2. Query Baris demi Baris dan Pivot Post-Process

Kaedah alternatif ini melibatkan pertanyaan baris demi baris data kerana ia berstruktur dalam pangkalan data anda. Anda akan mengumpul data dalam tatasusunan dan kemudian memutarkannya ke dalam lajur sebelum memaparkannya.

<code class="php">$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"];
}</code>

Kedua-dua pendekatan memerlukan pengekodan untuk menyesuaikan diri dengan situasi dinamik di mana bilangan lajur tidak diketahui. Pilihan pendekatan akan bergantung pada keperluan manipulasi data khusus dan pertimbangan kecekapan.

Atas ialah kandungan terperinci Bagaimana untuk Membuat Tabulasi Salib Dinamik dalam MySQL Apabila Nilai Lajur Tidak Diketahui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn