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

atualizar automaticamente a linha após determinado tempo


Você tem 2 opções para gerenciar isso com base na escala de tempo selecionada.

  1. Armazene um tempo de expiração com o anúncio e inclua expiração> NOW(); em qualquer consulta para selecionar anúncios (isso meio que nega a exigência de um campo 'ativo'.

  2. use um evento para gerenciar isso.

O método 1 pode exigir que algum administrador 'limpe os anúncios' periodicamente.

Método 2 - você ainda não pode criar eventos em um procedimento (da última vez que verifiquei), mas eles permitem que você defina e esqueça esse tipo de tarefa de administrador sem ter que executar outras verificações e outras coisas.

Cada evento deve ter um nome único, caso contrário você matará o evento já especificado...

exemplo:
<?php

$qry = "insert into ads values ( 'x', 'y', 'z' );"; 
/* db execute qry (pdo or what ever) */
$adId = // retriev a unique reference for ad.
$days = $_POST['expire'] == 16 ? 16 : 8;

$qry = "CREATE EVENT updateAd_".$adId."
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL ".$days." DAY
    ON COMPLETION NOT PRESERVE
    DO
    update ads set active = 'false' where ad_id = ".$adId.";";
// db execute qry (pdo or what ever);
?>

O evento é armazenado no banco de dados mysql e não no seu próprio, então você precisa de algumas permissões de nível de administrador para implementar.