2016-02-09 71 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