【发布时间】:2013-03-14 12:02:01
【问题描述】:
我创建了一个网站,我的用户可以在其中发布广告。
现在我想在特定时间后自动更改其广告表中的一行。
例如:假设我的用户上传/发布了一个广告,在他发布之前,他可以选择是否要保持 8 天或 16 天可见。
我应该使用 cron 检查还是有更好的方法?
Visible 被称为“活跃”的 DB,--tinyint 1 或 0。
提前致谢,
【问题讨论】:
我创建了一个网站,我的用户可以在其中发布广告。
现在我想在特定时间后自动更改其广告表中的一行。
例如:假设我的用户上传/发布了一个广告,在他发布之前,他可以选择是否要保持 8 天或 16 天可见。
我应该使用 cron 检查还是有更好的方法?
Visible 被称为“活跃”的 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”字段,则不需要“active”字段。 声明
select Expiration_date>now() as active from table
将是等效的。
【讨论】: