MySQL DELETE Statement with Limit
Seorang pengguna menghadapi ralat semasa cuba memadamkan baris daripada jadual menggunakan pertanyaan berikut:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Mesej ralat menunjukkan bahawa sintaks tidak betul.
Penjelasan
Ralat berlaku kerana pernyataan DELETE yang digunakan di sini termasuk offset dalam LIMIT klausa. Ini tidak dibenarkan dalam MySQL. Klausa LIMIT hanya boleh menentukan bilangan baris yang hendak dipadamkan.
Penyelesaian
Untuk memadam julat baris yang ditentukan daripada jadual, anda tidak boleh menggunakan ciri offset dalam klausa LIMIT. Sebaliknya, anda perlu menggunakan subquery untuk memilih baris yang hendak dipadamkan dan kemudian memadamkannya menggunakan nilai kunci utamanya.
Pertanyaan berikut boleh digunakan dalam senario ini:
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
Pertanyaan ini menggunakan sarang berganda untuk memilih baris yang akan dipadamkan dan mengatasi had MySQL.
Atas ialah kandungan terperinci Bagaimana untuk Memadam Julat Baris Tertentu dalam MySQL Menggunakan Klausa LIMIT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!