Pertanyaan Jadual Pangsi MySQL: Menggunakan Lajur Dinamik untuk Analisis Data
P粉101708623
2023-08-22 11:54:19
<p>Saya menggunakan jadual berikut untuk menyimpan data produk: </p>
<pre class="brush:php;toolbar:false;">mysql>
+--------------+----------------+--------+
|. id |
+--------------+----------------+--------+
|. 1 |. produk pertama |
|. 2 |. produk kedua |
+--------------+----------------+--------+
mysql> PILIH * DARI product_additional;
+-----------------+----------------+
|. id |
+-----------------+----------------+
|. 1 |
|. 1 |
|. 2 |
|. 2 |
|. 2 |
+----------------+----------------+</pre>
<p>Gunakan pertanyaan berikut untuk memilih rekod daripada kedua-dua jadual: </p>
<pre class="brush:php;toolbar:false;">mysql>
p.id
, p.nama
, p.penerangan
,MAX(IF(pa.fieldname = 'saiz', pa.fieldvalue, NULL)) sebagai `saiz`
,MAX(IF(pa.fieldname = 'height', pa.fieldvalue, NULL)) sebagai `height`
,MAX(IF(pa.fieldname = 'color', pa.fieldvalue, NULL)) sebagai `color`
DARI produk p
KIRI SERTAI produk_tambahan AS pa PADA p.id = pa.id
KUMPULAN OLEH p.id
+--------------+--------------+--------+-------- ---------+
|. id |
+--------------+--------------+--------+-------- ---------+
|. 1 |. produk pertama |
|. produk2 |
+--------------+--------------+--------+-------- -+--------+</pra>
<p>Semuanya berfungsi dengan baik :) </p>
<p>Memandangkan saya mengisi jadual "tambahan" secara dinamik, alangkah baiknya jika pertanyaan itu juga dinamik. Dengan cara ini saya tidak perlu menukar pertanyaan setiap kali saya memasukkan nama medan dan nilai medan baharu. </p>
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.
Klik di sini untuk melihat demo
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:
Lihat Demo
Nota: Had aksara bagi fungsi GROUP_CONCAT ialah 1024 aksara. Lihat kumpulan parameter_concat_max_len