计算查看帖子的次数

时间:2015-11-14 09:23:54

标签: php sql

我正在开展一个项目,其中只有帖子标题显示在主页上,点击标题后,完整帖子会加载到另一页<a href="posts.php?postId=<?php echo $row['posts_id'] ?>"><?php echo $row['title']; ?></a> 代码中:

hits

现在要计算发布视图,我的posts表格中有一列hits,最初0的值设置为hits,每当帖子打开时,值为posts.php增加了1,因此我的代码位于$id = $_GET['postId']; $sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id";

ContactTable

但是,这对于跟踪帖子视图不是一个好习惯,因为每当刷新页面时视图都会增加。我想要一个干净的系统来跟踪帖子视图,其中每个不同的用户或访问者视图增加一个,而不管同一用户/访问者查看相同帖子的次数(如在stackoverflow中)。就像通过他们的IP地址或其他东西跟踪他们一样,只是一个想法(这些人如何做)或者这些东西是如何运作的,这足以让我开始工作。

3 个答案:

答案 0 :(得分:2)

你无法如此简单地解决问题。您的问题在于计算查看页面的唯一用户(可能是时间组件)。您有几个问题,如评论中所述。首先是确定你在做什么。对于原型,IP地址和其他任何东西一样好。但是,它有许多缺点,你需要认真考虑识别“访客”。

有一种方法可以在SQL中解决您的问题。但是,它需要在帖子/访问者级别增加一个表。每个组合将有一行,然后您需要从那里计算。要快速获取唯一计数,您需要在该表上插入触发器。

以下是代码草图:

create unique index unq_postvisitors_post_visitor on postvisitors(postid, visitorid);

insert into PostVisitors (postid, visitorid)
    select $postid, $visitorid
    on duplicate key update set counter = counter + 1;

delimiter $$
create trigger trig_PostVisitors
    after insert on PostVisitors
begin
    update posts
        set numvisitors = numvisitors + 1
        where posts.post_id = new.post_id;
end;$$

delimiter ;

答案 1 :(得分:1)

我用来解决这个问题的最简单方法是通过cookies。

每当您的网页被打开时,您都会检查是否通过cookie_name设置了isset($_COOKIE[$cookie_name]) Cookie。

如果isset返回false,则通过setcookie(cookie_name, value, expire);设置cookie,也可以将expire time设置为24h(必须以秒为单位设置,因此24h为84600)。此外,您还可以通过访客柜台+1来触发计数系统。

如果isset返回true,则不执行任何操作。

PHP Cookies Refs

答案 2 :(得分:0)

试试这个<\ n>工作

$refreshed = $_SERVER['HTTP_CACHE_CONTROL'];
if ($refreshed == 'max-age=0'){
    $sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id"; 
}

在网页刷新时,请在页面$_SERVER['HTTP_CACHE_CONTROL']上尝试此脚本