Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah ada alternatif untuk IN dengan LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

5 terakhir itu bisa nomor berapa saja. Jika Anda menjalankan ini setiap kali skor ditambahkan, Anda dapat memilikinya sebagai 1 . Untuk memungkinkan lebih banyak margin kesalahan, gunakan 10 .

EDIT:Maaf, tampaknya Anda tidak dapat menggunakan offset di sini. Dalam hal ini:

DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)

Jika tidak memungkinkan Anda melakukannya (pilih dari tabel yang sama dengan pembaruan/hapus), coba:

SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp

EDIT lagi:Seperti yang ditunjukkan dalam komentar, menyebabkan masalah jika nilai ke-11 sama dengan ke-10. Coba:

SET @id = (SELECT scoreId FROM Highscore ORDER BY value DESC, scoreId DESC LIMIT 10,1), @val = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value <= @val AND scoreId < @id

Pengurutan berdasarkan scoreId pada variabel pertama memastikan bahwa ketika ada beberapa dengan skor yang sama, tidak kurang dari 10 akan tertinggal di sana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengimpor dump MySQL dari baris perintah DENGAN menimpa

  2. memperbarui tabel dengan kunci asing

  3. Tidak dapat menginstal permata mysql2

  4. Ekstrak string pencarian dalam konteks

  5. apakah php diurutkan lebih baik daripada urutan mysql?