Rumah  >  Artikel  >  pangkalan data  >  Bolehkah Nama Lajur Disatukan Secara Dinamik untuk Perlaksanaan Pertanyaan MySQL?

Bolehkah Nama Lajur Disatukan Secara Dinamik untuk Perlaksanaan Pertanyaan MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-10-24 04:43:30958semak imbas

Can Column Names Be Concatenated Dynamically for MySQL Query Execution?

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!

Kenyataan:
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