Had Subkueri MySQL: Memadam Catatan Tidak Termasuk 15 Terkini
Dalam bidang pengoptimuman pangkalan data, selalunya perlu mengalih keluar data yang berlebihan atau ketinggalan zaman. Soalan ini meneroka cara untuk memadam semua catatan kecuali 15 yang terkini menggunakan subkueri MySQL.
Pertanyaan asal:
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)
Walau bagaimanapun, pertanyaan ini menghadapi ralat kerana kekurangan sokongan MySQL untuk Subquery 'HAD & DALAM/SEMUA/SEBARANG/SEMANGAT' dalam versi terdahulunya. Untuk menangani isu ini, pertanyaan yang diubah suai boleh digunakan:
DELETE FROM posts WHERE id NOT IN ( SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
Dalam pertanyaan yang diubah suai ini, subkueri tambahan diperkenalkan sebagai jadual terbitan menggunakan alias 't'. Jadual terbitan ini mengandungi ID bagi 15 siaran terkini, diisih mengikut tertib menurun berdasarkan cap masanya. Pertanyaan utama kemudiannya menggunakan jadual terbitan ini untuk mengecualikan ID khusus tersebut semasa memadamkan siaran.
Dengan menggunakan penyelesaian ini, adalah mungkin untuk mencapai hasil yang diingini untuk memadamkan semua siaran kecuali 15 yang paling terkini dalam versi MySQL yang tidak' t menyokong 'HAD & DALAM/SEMUA/ MANA-MANA/SATU' subkueri. Pendekatan yang disemak ini berkesan mengalih keluar siaran usang sambil mengekalkan yang terkini untuk rujukan selanjutnya.
Atas ialah kandungan terperinci Bagaimana Untuk Memadam Semua Catatan Kecuali 15 Terkini dalam MySQL Tanpa Sokongan Subquery 'LIMIT & IN'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!