Ir para conteúdo
Fórum Script Brasil
  • 0

Exclusão e limit


windfall

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0

cara faz o seguinte,

se sua tabela tiver um campo ID auto increment

adicione a condição:

WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar)

agora,

se você não tiver este campo incremental, deverá primeiro criar uma querie que retorne a linha 20 em ordem descrescente e jogar em uma variavel

select ID

from tabela

order by 1 desc

limit 20,1

Link para o comentário
Compartilhar em outros sites

  • 0
cara faz o seguinte,

se sua tabela tiver um campo ID auto increment

adicione a condição:

WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar)
agora, se você não tiver este campo incremental, deverá primeiro criar uma querie que retorne a linha 20 em ordem descrescente e jogar em uma variavel
select ID
from tabela
order by 1 desc
limit 20,1
A primeira resposta
WHERE ID < (select max(id) - 20 from tabela_que_vai_deletar)
Não funciona. pois se o ID já sofreu exclusão a numeração estará com saltos e o resultado da subtração falhará. A segunda resposta só funcionará se o select para achar os vinte últimos, for executado independentemente da ação de exclusão. Ou seja se você colocar o select como parte da cláusula where do delete, então haverá erro. Exemplo:
DELETE FROM tabela_que_vai_deletar
WHERE ID = (select ID from tabela order by 1 desc limit 20,1)
Haverá erro. O Correto será:
SET @VARIAVEL = (select ID from tabela order by 1 desc limit 20,1);
DELETE FROM tabela_que_vai_deletar
WHERE ID < @VARIAVEL;

Link para o comentário
Compartilhar em outros sites

  • 0

Uma opção seria essa

set @limit = (select count(*) from tabela_que_vai_excluir )-20;

delete from tabela_que_vai_excluir order by id asc limit 0,@limit
acho que isso vai resolver, mas so explicando: em
set @limit = (select count(*) from tabela_que_vai_excluir )-20;
estou pegando o numero total de registo e reduzindo os 20 que você quer manter. e aqui
delete from tabela_que_vai_excluir order by id asc limit 0,@limit

esta deletando em ordem acendente (asc) todos os registros dentro do limite que você deseja, assim ele vai preservar os ultimos 20 registros.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...