Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Jadual Pangsi MySQL Dinamik dengan Lajur Dinamik?

Bagaimana untuk Mencipta Jadual Pangsi MySQL Dinamik dengan Lajur Dinamik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 19:48:16179semak imbas

How to Create Dynamic MySQL Pivot Tables with Dynamic Columns?

Pertanyaan Jadual Pangsi MySQL Dinamik dengan Lajur Dinamik

Dalam senario ini, data produk disimpan dalam dua jadual: product dan product_additional. Matlamatnya adalah untuk mencipta pertanyaan MySQL dinamik yang boleh menyesuaikan diri dengan perubahan dalam jadual product_additional, membenarkan penambahan nama medan dan nilai medan baharu tanpa perlu mengubah suai pertanyaan secara manual.

Pertanyaan yang disediakan secara berkesan mendapatkan semula data daripada kedua-dua jadual dan memaparkannya dalam format jadual, mengisi lajur saiz, ketinggian dan warna secara dinamik daripada jadual product_additional. Walau bagaimanapun, pertanyaan ini menjadi statik jika medan baharu ditambah secara dinamik.

Untuk mencapai dinamika sebenar, penyata Disediakan MySQL boleh digunakan. Pernyataan ini membenarkan pembinaan pertanyaan dinamik pada masa jalan. Kodnya adalah seperti berikut:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.fieldname = ''',
      fieldname,
      ''', pa.fieldvalue, NULL)) AS ',
      fieldname
    )
  ) INTO @sql
FROM product_additional;

SET @sql = CONCAT('SELECT p.id
                    , p.name
                    , p.description, ', @sql, ' 
                   FROM product p
                   LEFT JOIN product_additional AS pa 
                    ON p.id = pa.id
                   GROUP BY p.id, p.name, p.description');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Kod ini membina pertanyaan dinamik berdasarkan data dalam jadual product_additional, secara dinamik menambahkan lajur yang diperlukan pada rentetan pertanyaan. Pertanyaan dinamik yang terhasil kemudiannya dilaksanakan dan hasilnya dipaparkan.

Pertimbangan Tambahan:

Adalah penting untuk ambil perhatian bahawa fungsi GROUP_CONCAT mempunyai had panjang maksimum 1024 aksara . Jika pertanyaan memerlukan lebih banyak aksara, parameter group_concat_max_len boleh dilaraskan untuk menampung.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Jadual Pangsi MySQL Dinamik dengan Lajur Dinamik?. 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