在一定时间后自动更新行

时间:2013-03-14 02:53:08

标签: php mysql cron

我建立了一个用户可以发布广告的网站。

现在我想在一段时间后自动更改其广告表中的一行。

例如:假设我的用户上传/发布广告,并且在发布之前,他会选择是否要将其保持8天或16天。

我应该用cron检查一下还是有更好的方法吗?

可见被称为“活动”的数据库, - tinyint 1或0。

提前感谢,

3 个答案:

答案 0 :(得分:1)

您可以保留到期日吗?因此,创建一个用于存储日期的列。当用户创建广告然后从现在起计算8天后的日期并将其存储在列中。然后,在您提取广告的查询中,您可以限制那些有效期限仍未来的广告。

答案 1 :(得分:0)

存储到期日期。然后使用查询:

select * from table where Expiration_date>now();

如果您正在使用PHP,请查看strtotime功能。您可以使用它来创建日期:

$expiration = date("Y-m-d H:i:s",strtotime('+ '.$num.'days'));

如果您有'Expiration_date'字段,则不需要'active'字段。 声明

select Expiration_date>now() as active from table

等同。

答案 2 :(得分:0)

根据他们选择的时间刻度,您有2个选项来管理它。

  1. 存储广告的到期时间并包含到期时间>现在();在选择广告的任何查询中(这种方式否定了对“活跃”字段的要求。

  2. 使用事件来管理此事。

  3. 方法1可能需要一些管理员来清理广告'周期性。

    方法2 - 你不能在程序中创建事件(我上次检查过)但是它们允许你设置并忘记这些管理职责而不必运行其他检查和什么不是。

    每个事件必须具有唯一的名称,否则您将终止已指定的事件......

    示例:

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

    事件存储在mysql数据库中,而不是您自己的,因此您需要一些管理员级别的权限才能实现。