2016-02-09 68 views
2

我有一個表temp_views應該根據用戶的IP存儲視圖。如果視圖是1個小時,我想從表中刪除它。1小時後刪除臨時視圖

// Update views 

$stmt = $db->prepare("SELECT COUNT(*) FROM temp_views WHERE v_postid=? AND v_ip=?"); 
$stmt->bind_param("is",$pid,$ip); 
$stmt->execute(); 
$stmt->bind_result($temp_view); 
$stmt->fetch(); 
$stmt->close(); 

if ($temp_view == 0){ 

    // Insert a temporary view for 1 hr 

    $stmt = $db->prepare("INSERT INTO temp_views (v_ip,v_postid) VALUES (?,?)"); 
    $stmt->bind_param("si",$ip,$pid); 
    $stmt->execute(); 
    $stmt->close(); 

    // Add view to post 

    $stmt = $db->prepare("UPDATE posts SET p_views=p_views+1 WHERE p_id=?"); 
    $stmt->bind_param("i",$pid); 
    $stmt->execute(); 
    $stmt->close(); 

} 

我該如何去做這件事?

+1

的添加時間戳列保持當視圖應被刪除的時間。寫一個每分鐘左右運行的cronjob,並刪除時間戳過去的視圖。 –

回答

0

在您的表格temp_views中引入一個新的時間戳字段createdTime。這樣您就可以設置一個cron作業來執行刪除查詢,刪除一小時前的記錄。

在時間戳的情況下,使用

DELETE FROM `temp_views` WHERE createdTime < (UNIX_TIMESTAMP() - 3600); 

如果是日期時間字段,使用下面一個

DELETE FROM `temp_views` WHERE `createdTime` < ADDDATE(NOW(), INTERVAL -1HOUR); 
+0

如果'createdTime'是一個類似'1455012086'的時間戳,SQL將如何顯示?這給我一個錯誤 – frosty

+0

@frosty在時間戳的情況下,你必須使用另一個查詢。我更新了我的答案,請檢查。 – Thanga

+0

這有效,但與'<' not '>'? – frosty