DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5
Ostatnie 5
może być dowolną liczbą. Jeśli uruchomisz to za każdym razem, gdy zostanie dodany wynik, możesz mieć go jako 1
. Aby zezwolić na większy margines błędu, użyj 10
.
EDYCJA:Przepraszamy, najwyraźniej nie możesz tutaj użyć przesunięcia. W takim przypadku:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
Jeśli to nie pozwala na to (wybierz z tej samej tabeli co aktualizacja/usunięcie), spróbuj:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp
EDYTUJ ponownie:Jak wskazano w komentarzu, powoduje problemy, jeśli 11. wartość jest równa 10. Wypróbuj:
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
Porządkowanie według scoreId w pierwszej zmiennej zapewnia, że gdy jest kilka z tym samym wynikiem, zostanie tam nie mniej niż 10.