2

我创建了一个网站,我的用户可以在其中发布广告。

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

例如:假设我的用户上传/发布了一个广告,在他发布之前,他可以选择是否要保持 8 天或 16 天可见。

我应该用 cron 检查这个还是有更好的方法呢?

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

提前致谢,

4

3 回答 3

2

您有 2 个选项可以根据他们选择的时间尺度来管理这两个选项。

  1. 与广告一起存储过期时间并包括过期时间 > NOW(); 在任何查询中选择广告(这种否定了对“活动”字段的要求。

  2. 使用事件来管理它。

方法 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 数据库中,而不是您自己的数据库中,因此您需要一些管理员级别的权限才能实现。

于 2013-03-14T03:16:54.960 回答
1

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

于 2013-03-14T02:55:41.733 回答
1

保存有效期。然后使用查询:

select * from table where Expiration_date>now();

如果您使用的是 PHP,请查看strtotime函数。您可以使用它来创建您的日期,如下所示:

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

如果您有“Expiration_date”字段,则不需要“活动”字段。该声明

select Expiration_date>now() as active from table

将是等效的。

于 2013-03-14T03:02:19.597 回答