2013-03-14 90 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