我创建了一个网站,我的用户可以在其中发布广告。
现在我想在一段时间后自动更改他们的广告表中的一行。
例如:假设我的用户上传/发布了一个广告,在他发布之前,他可以选择是否要保持 8 天或 16 天可见。
我应该用 cron 检查这个还是有更好的方法呢?
可见被称为“活动”的 DB,- tinyint 1 或 0。
提前致谢,
您有 2 个选项可以根据他们选择的时间尺度来管理这两个选项。
与广告一起存储过期时间并包括过期时间 > NOW(); 在任何查询中选择广告(这种否定了对“活动”字段的要求。
使用事件来管理它。
方法 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 数据库中,而不是您自己的数据库中,因此您需要一些管理员级别的权限才能实现。
你可以保留有效期吗?因此,创建一个存储日期的列。当用户创建广告时,计算从现在起 8 天后的日期并将其存储在列中。然后在您的查询中提取广告,您可以限制那些到期日期仍在未来的广告。
保存有效期。然后使用查询:
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
将是等效的。