Mengemas kini Berbilang Baris Menggunakan LIMIT dalam MySQL
Apabila cuba mengemas kini set baris menggunakan klausa LIMIT, pembangun mungkin menghadapi ralat jika pertanyaan tidak berstruktur dengan betul. Artikel ini meneroka isu sedemikian dan menyediakan penyelesaian alternatif.
Pertanyaan dan Ralat Asal:
Pertimbangkan pertanyaan SQL berikut:
UPDATE messages SET test_read = 1 WHERE userid='xyz' ORDER BY date_added DESC LIMIT 5, 5;
Pertanyaan ini cuba mengemas kini 5 baris bermula dari baris ke-6 dalam tertib menurun bagi lajur date_added. Walau bagaimanapun, MySQL akan melaporkan ralat dengan operasi ini.
Sebab Ralat:
Ralat berlaku kerana klausa LIMIT tidak boleh digunakan bersama dengan klausa ORDER BY apabila cuba mengemas kini berbilang baris. Klausa LIMIT mengehadkan bilangan baris untuk dikembalikan, manakala klausa ORDER BY menentukan susunan baris dipilih.
Penyelesaian Alternatif:
Untuk mengemas kini berbilang baris menggunakan pendekatan seperti LIMIT, anda boleh menggunakan penyelesaian berikut:
UPDATE messages SET test_read=1 WHERE id IN ( SELECT id FROM ( SELECT id FROM messages ORDER BY date_added DESC LIMIT 5, 5 ) tmp );
Ini pertanyaan mula-mula melaksanakan subkueri untuk memilih ID baris untuk dikemas kini. Kemudian, pertanyaan utama menggunakan ID ini untuk menapis baris yang akan menerima kemas kini.
Penjelasan Penyelesaian:
Subkueri bersarang memilih ID daripada 5 baris bermula dari baris ke-6 dalam susunan menurun bagi lajur date_added. Pertanyaan luar kemudian menggunakan ID ini untuk mengenal pasti dan mengemas kini baris yang sepadan.
Kesimpulan:
Walaupun klausa LIMIT tidak boleh digunakan terus untuk mengemas kini berbilang baris menggunakan ORDER BY klausa, penyelesaian alternatif yang disediakan dalam artikel ini membolehkan pembangun mencapai hasil yang diinginkan. Dengan menggunakan pendekatan ini, pembangun boleh menentukan titik permulaan dan bilangan baris yang akan dikemas kini, memastikan operasi menyasarkan baris yang dimaksudkan dengan tepat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Berbilang Baris MySQL dengan Offset Menggunakan LIMIT dan ORDER BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!