[RESOLVIDO] Script para remover registros ao completar 24Hrs

Boa tarde pessoa !

Estou com um grande problema aqui, eu tenho uma tabela onde faço uma publicação, exemplo:

Table = POST
Columns: cod_post, cod_usuario, descricao, imgPost, data_inclusao, data_exclusao, excluido.

essas são as colunas da tabela, agora minha dúvida é…
Como faço para em min em min rodar algum serviço para colocar a flag “excluido = 1” no banco de dados caso aquele determinado registro já tenha completado 24Hrs ?

Estou bem perdido, utilizo php com mysql, tem alguma forma para resolver isso ? um job ou algo que fique executando ? ou alguma outra maneira que desconheço ?

agradeço desde já a todos :slight_smile:

EDIT:

Um amigo meu tentou me ajudar e fizemos este código, só que não consigo executar no localhost.

DELIMITER $$

CREATE PROCEDURE excluirPost()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE INDICE INT;
DECLARE cur1 CURSOR FOR SELECT COD_POST, DATA_INCLUSAO FROM iroyale.post where Date > DATE_SUB(CURDATE(),INTERVAL 24 HOUR);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur1;

read_loop: LOOP
FETCH cur1 INTO INDICE;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE IROYALE.POST.EXCLUIDO = 1 WHERE IROYALE.POST.COD_POST = INDICE;
END LOOP;
CLOSE cur1;
END;
DELIMITER

Veja com esse event do próprio banco.

CREATE DEFINER=root@% EVENT ExcluirPost
ON SCHEDULE
EVERY 1 DAY STARTS '2018-12-20’
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO UPDATE POST SET excluido = 1 WHERE data_inclusao < now() - INTERVAL 1 DAY;

1 curtida

@shuttner, obrigado por tentar me ajudar, está dando este erro, não manjo muito de sql, as está dando este erro e a pergunta também é…
como faz para ele ficar executando a cada 1 min ?

tenta STARTS CONCAT(DATE(NOW()+INTERVAL 1 DAY ), ' 20:00:00') ou STARTS '2015-11-23 20:00:00'

@rodriguesabner, obrigado pela ajuda, isso resolveu parte do código, o que está dando agora é o seguinte:

estes dois erros.

Fiz um teste aqui e funcionou.

DELIMITER $$
CREATE EVENT `excluir_posts` 
    ON SCHEDULE
    EVERY 1 DAY
    STARTS '2018-12-21 20:00:00' 
    ON COMPLETION PRESERVE ENABLE 
    DO 
        UPDATE POST SET excluido = 1 WHERE data_inclusao < now();
    $$
DELIMITER ;

Ao invés de EVERY 1 DAY, vc troca por EVERY 1 MINUTE

Esqueci do DELIMITER.

UPDATE POST SET excluido = 1 WHERE data_inclusao < now() - INTERVAL 1 MINUTE;

1 curtida

Até agora não consegui executar :frowning:

ele fica acusando erro na linha 3 : unrecognized statement type. (near schedule)
não sei porque está havendo este problema :confused:

Rapaz… Você tá usando o MariaDb? MySql?

php com mysql

Entendi. Tenta “sem ser” por código então.

Clica no seu Database, clica em "Eventos"

E faz isso:

No seu Event Type vai estar em One Time, é só mudar pra RECURRING. No start vc adapta pra a data e pra hora que vc quiser…

1 curtida

@rodriguesabner, não sabia que tinha uma interface ^^
mas acho que ajuda bastante, agora só me ajuda em uma coisa (sou burro em sql).

ai vai criar um “job” para excluir um registro na base de dados caso ele complete 24Hrs de publicado correto? Agora á pergunta é… como ele irá saber que o registro tem 24Hrs de publicado já ? onde e como faço isso ?
Acredite… Estou perdido em mysql

Então, nesse caso ele tá só atualizando a tabela, trocando o número da coluna ‘excluido’ pra ‘1’

UPDATE POST SET excluido = 1 WHERE data_inclusao < now() - INTERVAL 1 MINUTE;

Update: Atualizar

Post: Sua tabela

Set: Definir

excluido: Sua coluna

Where: Onde

data_inclusao: Sua coluna

now(): Agora


Então ficaria assim: Atualizar a tabela POST, Definindo o valor da coluna excluido pra 1, onde a data_inclusao for menor que agora

UPDATE POST SET excluido = 1 WHERE data_inclusao < now();

Ele vai saber que o registro tem 24 Hrs por causa da “Data Inclusao”, e vai fazer a comparação com a data de agora.


Mas creio que ao invés de menor, teria que ser maior. Agora dei uma leve bugada aqui

1 curtida

acho que entendi, então no caso esse event já pega a data e verifica internamente se está publicado faz 24hrs correto ? E se tiver 24Hrs ele seta como 1 o campo excluido certo ?
neste caso a coluna de data_inclusao terá que ser datetime ?

Isso mesmo. Mas a tabela é sua kkkkk, vc realmente queria fazer isso? Trocar o número do post excluído pra 1? Sim, DATETIME

suahushaushaushauhs sim, colocar excluido =1, para não perder o registro.

ai como ficou :slightly_smiling_face:

ai quando apertar em excluir, ele ira executar a cada 1 minuto a partir das 00:00:00 hrs automaticamente certo ?

Certo, só troca o: < por: >.


Ah não, é menor mesmo

certo, então caso o registro que está no banco tenha fechado 24hrs de postado ele “exclui”.
algo simples pelo visto via interface e eu aqui que nem doido ^^ obrigado amigo

1 curtida

Opa, agora que reparei, vc tem que trocar a data de hoje pra amanhã. Pq nesse caso aí já tá rodando