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!