Mendapatkan semula N Baris Terakhir dalam MySQL dalam Susunan Menaik dengan Data Dimanipulasi
Memilih baris N terakhir daripada pangkalan data MySQL ialah operasi biasa. Walau bagaimanapun, menentukan susunan baris yang harus dikembalikan boleh menjadi rumit apabila data sedang dimanipulasi.
Pertimbangkan senario berikut: anda ingin memilih 50 baris terakhir daripada jadual bernama "jadual" berdasarkan lajur "id", yang merupakan kunci utama. Mengisih baris dalam tertib menaik mengikut "id" ialah keperluan penting.
Percubaan Gagal
Pertanyaan berikut cuba mengisih keputusan dalam tertib menurun, tetapi gagal untuk mengembalikan 50 baris terakhir:
SELECT * FROM `table` ORDER BY id DESC LIMIT 50;
Sebagai alternatif, pertanyaan ini cuba kenal pasti 50 baris terakhir dengan membandingkan nilai "id" kepada nilai maksimum "id" tolak 50, tetapi ia tidak berfungsi jika baris telah dipadamkan:
SELECT * FROM `table` WHERE id > ((SELECT MAX(id) FROM chat) - 50) ORDER BY id ASC;
Penyelesaian
Untuk menangani isu ini, anda boleh menggunakan subquery untuk mencapai yang diingini hasil:
SELECT * FROM ( SELECT * FROM table ORDER BY id DESC LIMIT 50 ) AS sub ORDER BY id ASC;
Pertanyaan ini mula-mula melaksanakan subkueri, yang memilih 50 baris terakhir daripada "jadual" dan menyusunnya dalam tertib menurun. Subkueri yang terhasil kemudiannya dialiaskan sebagai "sub."
Akhir sekali, pertanyaan luar memilih semua baris daripada subkueri "sub" dan menyusunnya dalam tertib menaik. Ini dengan berkesan mendapatkan semula 50 baris terakhir daripada jadual, memastikan baris itu diisih dalam tertib menaik berdasarkan lajur "id" dan mengendalikan kes di mana baris mungkin telah dimanipulasi.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula N Baris Terakhir dalam Susunan Menaik daripada MySQL Walaupun Manipulasi Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!