Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencipta Pertanyaan Jadual Pangsi MySQL Dinamik Menggunakan Penyata Disediakan?

Bagaimana untuk Mencipta Pertanyaan Jadual Pangsi MySQL Dinamik Menggunakan Penyata Disediakan?

Linda Hamilton
Lepaskan: 2024-12-20 13:53:09
asal
870 orang telah melayarinya

How to Create a Dynamic MySQL Pivot Table Query Using Prepared Statements?

Pertanyaan Jadual Pangsi MySQL Dinamik dengan Lajur Diperoleh daripada Data Dinamik

Pertanyaan Jadual Pangsi

Keperluan anda adalah untuk memutar data daripada produk dan produk_jadual tambahan, dengan lajur diisi secara dinamik berdasarkan nilai dalam produk_jadual tambahan. Pertanyaan semasa, yang menggunakan pengagregatan bersyarat dengan IF(), tidak dinamik dan memerlukan perubahan manual dengan setiap medan baharu ditambah.

Penyelesaian Menggunakan Penyata Disediakan

Untuk mencapai pangsi dinamik dalam MySQL, kami boleh menggunakan pernyataan yang disediakan, yang membolehkan kami membina rentetan pertanyaan pada masa jalan. Kod berikut menunjukkan pendekatan ini:

-- Initialize @sql variable
SET @sql = NULL;

-- Dynamically create the query string by iterating over distinct `fieldname` values
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.fieldname = ''',
      fieldname,
      ''', pa.fieldvalue, NULL)) AS ',
      fieldname
    )
  ) INTO @sql
FROM product_additional;

-- Concatenate the constructed string with the base query
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 the query
PREPARE stmt FROM @sql;

-- Execute the prepared query
EXECUTE stmt;

-- Deallocate the prepared statement
DEALLOCATE PREPARE stmt;
Salin selepas log masuk

Pelaksanaan

Kod ini menjana rentetan pertanyaan dinamik berdasarkan nilai nama medan unik dalam jadual product_additional. Rentetan itu kemudiannya digunakan untuk membina pernyataan PREPARE, yang dilaksanakan dan kemudian dialokasikan.

Limitation

Perhatikan bahawa fungsi GROUP_CONCAT mempunyai had aksara sebanyak 1024 aksara. Anda boleh meningkatkan had ini dengan menetapkan parameter group_concat_max_len.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Pertanyaan Jadual Pangsi MySQL Dinamik Menggunakan Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan