我做了一个网站,我的用户可以在那里发布广告。
现在,我想在特定时间后自动更改他们的Ads表中的一行。
例如:假设我的用户上传/发布了一个广告,在他发布它之前,他可以选择是否要让它在8天或16天内可见。
我应该用cron检查,还是有更好的方法呢?
Visible被称为数据库的“活动”,- tinyint 1或0。
提前谢谢你,
发布于 2013-03-14 11:16:55
您有两个选项来管理这两个选项,这两个选项都基于他们选择的时间尺度。
方法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-14 10:55:42
你能保留到期日吗?因此,创建一个列来存储日期。当用户创建广告时,然后计算8天后的日期,并将其存储在列中。然后,在提取广告的查询中,您可以限制那些到期日期仍在未来的广告。
发布于 2013-03-14 11:02:20
存储过期日期。然后使用查询:
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都是等同的。
https://stackoverflow.com/questions/15400342
复制相似问题