Nilai baris dinamik MySQL sebagai nama lajur
MySQL tidak mempunyai fungsi pangsi asli untuk data jadual lama yang mempunyai nilai baris dinamik sebagai nama lajur dan dipaparkan dalam format jadual pangsi. Walau bagaimanapun, pernyataan yang disediakan menggunakan GROUP_CONCAT()
boleh membantu mencapai hasil yang diinginkan.
Contoh jadual:
<code class="language-sql">id name value ------------------------------ 0 timezone Europe/London 0 language en 0 country 45 0 something x 1 timezone Europe/Paris 1 language fr 1 country 46</code>
Output sasaran:
<code>id timezone language country something --------------------------------------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46</code>
Bina pernyataan yang disediakan seperti berikut:
<code class="language-sql">SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' SEPARATOR ''), ' FROM `table` ', GROUP_CONCAT(' LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '` ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name) SEPARATOR ''), ' GROUP BY `table`.id' ) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t; PREPARE stmt FROM @qry; EXECUTE stmt;</code>
Pertanyaan ini secara dinamik menjana pernyataan SELECT
yang menggunakan LEFT JOIN
untuk menggabungkan baris dengan nilai id
yang sama, mengekstrak nilai yang sepadan untuk nilai name
unik. Kemudian tekan id
untuk mengumpulkan hasil untuk menjana format jadual pangsi yang diingini.
Walaupun MySQL tidak mempunyai keupayaan pangsi asli, kaedah ini menyediakan cara untuk mendapatkan semula data daripada jadual warisan dengan nama lajur dinamik secara berstruktur.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Jadual MySQL dengan Nama Lajur Dinamik daripada Nilai Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!