sql >> Databáze >  >> RDS >> Mysql

Existuje alternativa k IN s LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Posledních 5 může být libovolné číslo. Pokud toto spustíte při každém přidání skóre, můžete to mít jako 1 . Chcete-li zajistit větší chybovost, použijte 10 .

EDIT:Promiňte, zřejmě zde nemůžete použít offset. V tom případě:

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

Pokud vám to nedovolí (vyberte ze stejné tabulky jako aktualizace/smazání), zkuste:

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

UPRAVTE znovu:Jak bylo uvedeno v komentáři, způsobuje problémy, pokud je 11. hodnota rovna 10. Zkuste:

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

Seřazení podle scoreId v první proměnné zajistí, že když jich bude několik se stejným skóre, nezbude tam méně než 10.



  1. Aktualizovat časové razítko při aktualizaci řádku v PostgreSQL

  2. Přidání zalomení řádku do textu MySQL INSERT INTO

  3. soubor mysql.h nelze nalézt

  4. Jak nainstalovat phpMyAdmin na jeho vlastní aplikaci