DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Последното 5
може да бъде произволно число. Ако стартирате това всеки път, когато се добави резултат, можете да го имате като 1
. За да позволите повече допустима грешка, използвайте 10
.
РЕДАКТИРАНЕ:Съжалявам, очевидно не можете да използвате отместване тук. В такъв случай:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Ако не ви позволява да направите това (изберете от същата таблица като актуализация/изтриване), опитайте:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
РЕДАКТИРАНЕ отново:Както е посочено в коментар, създава проблеми, ако 11-та стойност е равна на 10-та. Опитайте:
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
Подреждането по scoreId в първата променлива гарантира, че когато има няколко с еднакъв резултат, там ще бъдат оставени не по-малко от 10.