Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-10-28 08:36:29
asal
527 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan