DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Esse último
5
pode ser qualquer número. Se você executar isso toda vez que uma pontuação for adicionada, poderá tê-la como 1
. Para permitir mais margem de erro, use 10
. EDIT:Desculpe, aparentemente você não pode usar um deslocamento aqui. Nesse caso:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Se não permitir que você faça isso (selecione na mesma tabela que uma atualização/exclusão), tente:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
EDITAR novamente:Como apontado no comentário, causa problemas se o 11º valor for igual ao 10º. Tentar:
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
A ordenação pelo scoreId na primeira variável garante que quando houver vários com a mesma pontuação, não serão deixados menos de 10.