Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe uma alternativa para IN com LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Esse último 5 pode ser qualquer número. Se você executar isso toda vez que uma pontuação for adicionada, poderá tê-la como 1 . Para permitir mais margem de erro, use 10 .

EDIT:Desculpe, aparentemente você não pode usar um deslocamento aqui. Nesse caso:
DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)

Se não permitir que você faça isso (selecione na mesma tabela que uma atualização/exclusão), tente:
SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp

EDITAR novamente:Como apontado no comentário, causa problemas se o 11º valor for igual ao 10º. Tentar:
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

A ordenação pelo scoreId na primeira variável garante que quando houver vários com a mesma pontuação, não serão deixados menos de 10.