Ralat Ditemui Semasa Menggunakan MySQL DELETE Statement dengan LIMIT
Masalah:
Apabila cuba untuk padam baris daripada jadual menggunakan pernyataan MySQL DELETE dengan klausa LIMIT, ralat ditemui pada nilai offset dalam klausa LIMIT. Pertanyaan berikut menunjukkan isu:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Mesej ralat yang diterima pada nilai offset (50) ialah:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 50' at line 1
Penyelesaian:
Ralat berlaku kerana MySQL tidak membenarkan menyatakan offset dalam klausa LIMIT bagi pernyataan DELETE. Akibatnya, kita mesti menggunakan pendekatan alternatif untuk mencapai hasil yang diingini.
Untuk memadamkan baris tertentu daripada jadual berdasarkan julat, kita boleh menggunakan subkueri yang bersarang dalam pertanyaan DELETE utama. Pertanyaan yang diubah suai berikut menunjukkan teknik ini:
<code class="sql">DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )</code>
Dalam pertanyaan ini, subkueri dalam klausa IN mendapatkan semula ID baris yang akan dipadamkan berdasarkan julat yang ditentukan. Dengan mengandaikan jadual mempunyai lajur kunci utama bernama id, kita boleh menggunakannya untuk mengenal pasti setiap baris secara unik.
Nota: Adalah penting untuk melaksanakan sarang berganda untuk mengelakkan masalah dengan ketidakupayaan MySQL untuk memilih daripada jadual yang diubah suai pada masa ini.
Atas ialah kandungan terperinci **Mengapa MySQL DELETE dengan LIMIT dan Offset Menyebabkan Ralat?**. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!