Rumah > Soal Jawab > teks badan
P粉0463871332023-08-23 11:13:47
Saya mempunyai cara yang sedikit berbeza untuk mencapai ini daripada jawapan yang diterima. Pendekatan ini mengelakkan penggunaan GROUP_CONCAT yang mempunyai had 1024 aksara secara lalai dan tidak akan berfungsi jika anda mempunyai banyak medan melainkan anda menukar had tersebut.
SET @sql = ''; SELECT @sql := CONCAT(@sql,if(@sql='','',', '),temp.output) FROM ( SELECT DISTINCT CONCAT( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) as output FROM product_additional ) as temp; 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;
Klik di sini untuk melihat demo
P粉7680455222023-08-23 00:34:41
Dalam MySQL, satu-satunya cara untuk melakukan ini secara dinamik ialah menggunakan pernyataan yang disediakan. Berikut ialah artikel yang bagus tentang mereka:
Jadual pangsi dinamik (tukar baris kepada lajur)
Kod anda akan kelihatan seperti ini:
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;
Lihat Demo
Nota: Had aksara bagi fungsi GROUP_CONCAT ialah 1024 aksara. Lihat kumpulan parameter_concat_max_len