Menggabungkan Nama Lajur Secara Dinamik untuk Pelaksanaan Pertanyaan dalam MySQL
Pernyataan Masalah:
Dalam MySQL , adalah diingini untuk menggabungkan nama lajur dalam pertanyaan di mana bahagian pertama nama lajur ialah rentetan dan bahagian kedua ialah nombor yang diambil daripada pertanyaan lain.
Percubaan Penyelesaian:
Pernyataan SQL berikut cuba mencapai penggabungan:
<code class="sql">SELECT CONCAT('column', mytable.mycolumn) FROM table ...</code>
Walau bagaimanapun, pendekatan ini tidak memberikan hasil yang diingini dan penggabungan nampaknya tidak berkesan.
Penyelesaian :
Bertentangan dengan kepercayaan terdahulu, sememangnya mungkin untuk membina nama lajur dalam MySQL secara dinamik menggunakan penyataan yang disediakan di sebelah pelayan. Pertimbangkan pendekatan berikut:
<code class="sql">set @query := ( select concat( "select", group_concat(concat("\n 1 as ", column_name) separator ','), "\nfrom dual") from information_schema.columns where table_name = 'columns') ; prepare s1 from @query ; execute s1 ; deallocate prepare s1 ;</code>
Kod ini membina rentetan pertanyaan secara dinamik berdasarkan kandungan jadual lajur. Kenyataan prepare kemudiannya digunakan untuk menyusun rentetan pertanyaan, yang kemudiannya boleh dilaksanakan menggunakan pernyataan laksana.
Atas ialah kandungan terperinci Bolehkah Nama Lajur Disatukan Secara Dinamik untuk Perlaksanaan Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!