sql >> Base de Datos >  >> RDS >> Mysql

¿Hay alguna alternativa a IN con LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Eso último 5 puede ser cualquier número. Si ejecuta esto cada vez que se agrega una puntuación, puede tenerla como 1 . Para permitir más margen de error, use 10 .

EDITAR:Lo siento, aparentemente no puedes usar una compensación aquí. En ese caso:

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

Si no le permite hacer eso (seleccione de la misma tabla como actualización/eliminación), intente:

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

EDITAR nuevamente:como se señaló en el comentario, causa problemas si el valor 11 es igual al 10. Prueba:

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

Ordenar por el scoreId en la primera variable asegura que cuando haya varios con la misma puntuación, ahí quedará no menos de 10.