Jump to content
Fórum Script Brasil
  • 0

Exclusão e limit


windfall

Question

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...