Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Lajur Jadual MySQL ke Baris?
Data Lajur Jadual Pangsi MySQL sebagai Baris
Untuk memutar data lajur jadual sebagai baris dalam MySQL, anda boleh menggunakan gabungan MAX( ) dan CASE berfungsi bersama dengan klausa GROUP BY. Berikut ialah sintaks umum:
SELECT GROUP_BY_COLUMNS, MAX(CASE WHEN condition1 THEN column1 END) AS column1_alias, MAX(CASE WHEN condition2 THEN column2 END) AS column2_alias, ... FROM TABLE GROUP BY GROUP_BY_COLUMNS
Dalam contoh yang disediakan, anda mempunyai tiga jadual: Soalan, yang mengandungi soalan soal selidik; Keputusan, yang memautkan pengguna kepada pekerjaan; dan Jawapan, yang mengandungi jawapan pengguna kepada soalan.
Untuk memutarkan jawapan soalan sebagai lajur bagi setiap set hasil, anda boleh menggunakan pertanyaan berikut:
SELECT a.ID, a.user_ID, a.job_id, MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?', MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?', MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id
Pertanyaan ini menggabungkan Jadual jawapan dengan jadual Soalan berdasarkan medan fk_question_id dan jadual Keputusan berdasarkan medan fk_result_id. Ia kemudian mengumpulkan hasil mengikut lajur ID, user_ID dan job_id, dan untuk setiap kumpulan, ia mengira jawapan maksimum untuk setiap soalan menggunakan fungsi MAX() dan pernyataan CASE.
Sebagai alternatif, jika anda mempunyai bilangan soalan yang tidak diketahui, anda boleh menggunakan pertanyaan SQL dinamik yang membina rentetan pertanyaan berdasarkan soalan yang tersedia:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN c.question = ''', question, ''' then b.answer end) AS ', CONCAT('`',question,'`') ) ) INTO @sql FROM Question; SET @sql = CONCAT('SELECT a.ID, a.user_ID, a.job_id, ', @sql, ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Pertanyaan dinamik membina pembolehubah @sql dengan lajur yang diperlukan untuk setiap soalan dan melaksanakannya sebagai pernyataan yang disediakan.
Pertanyaan ini akan mengembalikan jawapan soalan sebagai lajur untuk setiap set hasil, membolehkan anda memaparkannya dalam bentuk yang mesra pengguna format.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Lajur Jadual MySQL ke Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!