我有一个表temp_views
它应该根据用户的IP存储视图。如果视图是 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();
}
我该怎么做?
在
表格temp_views
中引入新的时间戳字段createdTime
。这样您就可以设置一个 cron 作业,该作业将执行删除查询,该查询将删除一小时前的记录。
在时间戳的情况下,请使用
DELETE FROM `temp_views` WHERE createdTime < (UNIX_TIMESTAMP() - 3600);
如果是日期时间字段,请使用下面的字段
DELETE FROM `temp_views` WHERE `createdTime` < ADDDATE(NOW(), INTERVAL -1HOUR);