Pertanyaan Jadual Pangsi MySQL Lajur Dinamik
P粉262113569
2023-08-27 17:24:10
<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 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 baik :) </p>
<p>Memandangkan saya mengisi jadual "tambah" secara dinamik, adalah bagus jika pertanyaan itu juga dinamik. Dengan cara ini saya tidak perlu menukar pertanyaan setiap kali saya memasukkan nama medan dan nilai medan baharu. </p>
Pendekatan saya sedikit berbeza daripada jawapan yang diterima. Dengan cara ini anda mengelak daripada menggunakan GROUP_CONCAT, yang mempunyai had lalai 1024 aksara, yang tidak akan berfungsi jika anda mempunyai banyak medan melainkan anda menukar had tersebut.
Klik di sini untuk melihat demo
Satu-satunya cara untuk melakukan ini secara dinamik dalam MySQL ialah menggunakan pernyataan yang disediakan. Berikut ialah artikel hebat tentang mereka:
Jadual Pangsi Dinamik (tukar baris kepada lajur)
Kod anda akan kelihatan seperti ini:
Lihat Demo
Nota: Fungsi GROUP_CONCAT mempunyai had panjang 1024 aksara. Lihat kumpulan parameter_concat_max_len