Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Melaksanakan Pertanyaan MySQL dengan Nama Jadual Diberikan Secara Dinamik?
Dalam MySQL, adalah mungkin untuk melaksanakan pertanyaan yang melibatkan jadual dengan nama yang ditetapkan secara dinamik. Keupayaan ini berguna apabila bekerja dengan set jadual yang namanya mesti diekstrak daripada sumber lain atau diperoleh daripada input pengguna.
Satu senario biasa di mana pemilihan jadual dinamik menjadi perlu ialah apabila nama jadual disimpan dalam pembolehubah. Sebagai contoh, pertimbangkan kod berikut:
SET @ID_1 = (SELECT ID FROM `slider` LIMIT 0,1); SET @Cat = (SELECT Category FROM `slider` LIMIT 0,1); select * from @Cat where ID = @ID_1
Kod ini cuba memilih baris daripada jadual bernama @Cat, di mana nama jadual diberikan nilai pembolehubah. Walau bagaimanapun, melaksanakan pertanyaan ini dalam MySQL akan mengakibatkan ralat, kerana pangkalan data tidak mengenali '@Cat' sebagai nama jadual yang sah.
Untuk mengatasi isu ini , adalah perlu untuk menggunakan penyata yang disediakan, yang membolehkan pelaksanaan dinamik pertanyaan SQL. Idea asas adalah untuk membina rentetan pertanyaan berdasarkan nilai pembolehubah dan kemudian gunakan penyata SEDIAKAN dan LAKSANAKAN untuk menyediakan dan melaksanakan pertanyaan.
Di bawah ialah kod yang disemak yang menggunakan penyataan yang disediakan untuk mencapai pemilihan jadual dinamik:
SET @s = CONCAT('select * from ', @Cat, ' where ID = ', @ID_1); -- Construct the query string PREPARE stmt1 FROM @s; -- Prepare the statement EXECUTE stmt1; -- Execute the statement DEALLOCATE PREPARE stmt1; -- Deallocate the prepared statement
Dalam skrip ini, fungsi CONCAT() digunakan untuk membina rentetan pertanyaan berdasarkan nilai pembolehubah @Cat dan @ID_1. Kenyataan yang disediakan kemudian dibuat menggunakan pernyataan PREPARE, dan pertanyaan dilaksanakan dengan pernyataan EXECUTE. Akhir sekali, penyata yang disediakan diagihkan menggunakan penyataan DEALLOCATE PREPARE.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pertanyaan MySQL dengan Nama Jadual Diberikan Secara Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!