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.