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.