sql >> Base de Datos >  >> RDS >> Mysql

actualizar automáticamente la fila después de cierto tiempo

Tiene 2 opciones para administrar esto según la escala de tiempo que seleccionen.

  1. Almacene un tiempo de caducidad con el anuncio e incluya caducidad> AHORA(); en cualquier consulta para seleccionar anuncios (esto anula el requisito de un campo 'activo'.

  2. use un evento para administrar esto.

El método 1 puede requerir que algún administrador "limpie los anuncios" periódicamente.

Método 2:aún no puede crear eventos en un procedimiento (la última vez que lo comprobé), pero le permiten configurar y olvidar este tipo de tareas administrativas sin tener que ejecutar otras comprobaciones y demás.

Cada evento debe tener un nombre único; de lo contrario, eliminará el evento ya especificado...

ejemplo:

<?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);
?>

El evento se almacena en la base de datos mysql y no en la suya, por lo que necesita algunos permisos de nivel de administrador para implementarlo.