sql >> Database >  >> RDS >> Mysql

Is er een alternatief voor IN met LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Die laatste 5 kan elk nummer zijn. Als je dit telkens uitvoert wanneer een score wordt toegevoegd, kun je deze als 1 . hebben . Gebruik 10 . om meer foutenmarge toe te staan .

EDIT:Sorry, blijkbaar kun je hier geen offset gebruiken. In dat geval:

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

Als u dat niet kunt doen (selecteer uit dezelfde tabel als bijwerken/verwijderen), probeer dan:

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

EDIT opnieuw:zoals opgemerkt in commentaar, veroorzaakt problemen als de 11e waarde gelijk is aan de 10e. Probeer:

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

Sorteren op scoreId in de eerste variabele zorgt ervoor dat als er meerdere met dezelfde score zijn, er niet minder dan 10 overblijven.



  1. Highcharts grafieken met meerdere lijnen

  2. Een receptendatabase ontwerpen die zowel ingrediënten als subrecepten moet bevatten

  3. Hoe stel ik het geselecteerde item in een vervolgkeuzelijst in?

  4. Carreturns verwijderen in Mysql DB