DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Quell'ultimo 5
può essere qualsiasi numero. Se lo esegui ogni volta che viene aggiunto un punteggio, puoi averlo come 1
. Per consentire un margine di errore maggiore, usa 10
.
EDIT:Spiacente, a quanto pare non è possibile utilizzare un offset qui. In tal caso:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Se non ti consente di farlo (seleziona dalla stessa tabella di un aggiornamento/cancella), prova:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
EDIT di nuovo:come sottolineato nel commento, causa problemi se l'11° valore è uguale a 10°. Prova:
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
L'ordinamento in base allo scoreId nella prima variabile garantisce che quando ce ne sono diversi con lo stesso punteggio, non ne rimangano meno di 10.