Mysql
 sql >> Database >  >> RDS >> Mysql

Esiste un'alternativa a IN con LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Quell'ultimo 5 può essere qualsiasi numero. Se lo esegui ogni volta che viene aggiunto un punteggio, puoi averlo come 1 . Per consentire un margine di errore maggiore, usa 10 .

EDIT:Spiacente, a quanto pare non è possibile utilizzare un offset qui. In tal caso:

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

Se non ti consente di farlo (seleziona dalla stessa tabella di un aggiornamento/cancella), prova:

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

EDIT di nuovo:come sottolineato nel commento, causa problemi se l'11° valore è uguale a 10°. Prova:

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

L'ordinamento in base allo scoreId nella prima variabile garantisce che quando ce ne sono diversi con lo stesso punteggio, non ne rimangano meno di 10.