DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Eso último 5
puede ser cualquier número. Si ejecuta esto cada vez que se agrega una puntuación, puede tenerla como 1
. Para permitir más margen de error, use 10
.
EDITAR:Lo siento, aparentemente no puedes usar una compensación aquí. En ese caso:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Si no le permite hacer eso (seleccione de la misma tabla como actualización/eliminación), intente:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
EDITAR nuevamente:como se señaló en el comentario, causa problemas si el valor 11 es igual al 10. Prueba:
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
Ordenar por el scoreId en la primera variable asegura que cuando haya varios con la misma puntuación, ahí quedará no menos de 10.