2013-03-14 59 views
0

我制作了一个网站,我的用户可以发布广告。特定时间后自动更新行

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

例如:假设我的用户上传/发布了一个广告,并且在发布广告之前,如果他想让它在8天或16天内可见,他会得到选择。

我应该用cron来检查一下,还是有更好的方法来做到这一点?

可见被称为 “主动” 的DB, - TINYINT 1或0

在此先感谢,

回答

0

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

  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数据库中,而不是你自己的,所以你需要一些管理级别的权限来实现。

+0

谢谢伊恩!这工作完美! – 2013-03-15 01:20:59

1

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

0

存储到期日期。如果你使用PHP检查出strtotime功能

select * from table where Expiration_date>now(); 

:然后使用该查询。你可以用它来创建你的约会像这样:

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

如果你有“有效期”字段中的“活性”字段是没有必要的。 声明

select Expiration_date>now() as active from table 

将是等效的。

+0

感谢您的回答! 对不起,我问我的问题都不对。 我想补充一些计时器,以便在8或16天后,“活动”字段将从1变为0,真/假。 我既有时间,也有表格中的expiration_time。 谢谢! – 2013-03-14 03:15:08

+0

如果您有'Expiration_date'字段,'active'字段不是必需的。 “从表中选择Expiration_date> now()作为活动的声明”将是等效的。 – 2013-03-14 04:00:52