Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine Alternative zu IN mit LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Das letzte 5 kann eine beliebige Zahl sein. Wenn Sie dies jedes Mal ausführen, wenn eine Punktzahl hinzugefügt wird, können Sie es als 1 haben . Verwenden Sie 10, um mehr Fehlerspielraum zuzulassen .

EDIT:Entschuldigung, anscheinend können Sie hier keinen Offset verwenden. In diesem Fall:

DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)

Wenn dies nicht möglich ist (aus derselben Tabelle wie beim Aktualisieren/Löschen auswählen), versuchen Sie Folgendes:

SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp

Nochmals BEARBEITEN:Wie im Kommentar erwähnt, verursacht es Probleme, wenn der 11. Wert gleich dem 10. ist. Versuchen Sie:

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

Die Sortierung nach der scoreId in der ersten Variablen stellt sicher, dass bei mehreren mit derselben Punktzahl nicht weniger als 10 übrig bleiben.