DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Ce dernier 5
peut être n'importe quel nombre. Si vous exécutez ceci à chaque fois qu'un score est ajouté, vous pouvez l'avoir comme 1
. Pour permettre une plus grande marge d'erreur, utilisez 10
.
EDIT :Désolé, apparemment, vous ne pouvez pas utiliser de décalage ici. Dans ce cas :
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Si cela ne vous permet pas de le faire (sélectionnez dans le même tableau qu'une mise à jour/suppression), essayez :
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
EDIT à nouveau :comme indiqué dans le commentaire, pose des problèmes si la 11e valeur est égale à la 10e. Essayez :
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
Le classement par scoreId dans la première variable garantit que lorsqu'il y en a plusieurs avec le même score, il n'en reste pas moins de 10.