Mysql
 sql >> Base de données >  >> RDS >> Mysql

Existe-t-il une alternative à IN avec LIMIT ?

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.