我正在做一个项目,主页上只显示帖子的标题,点击标题时,完整的帖子会加载到另一个页面 posts.php
代码是:
<a href="posts.php?postId=<?php echo $row['posts_id'] ?>"><?php echo $row['title']; ?></a>
现在要计算帖子浏览量,我的 posts
表中有一列 hits
,hits
的初始值设置为 0
每当打开一个帖子时,hits
的值就会增加 1,为此我的代码在 posts.php
$id = $_GET['postId'];
$sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id";
但这不是跟踪帖子浏览量的好做法,因为每当页面刷新时浏览量都会增加。我想要一个干净的系统来跟踪帖 subview ,其中对于每个不同的用户或访问者 View 增加一个,而不管同一用户/访问者查看同一个帖子的次数(如在 stackoverflow 中)。就像通过他们的 IP 地址或其他方式跟踪他们一样,只是一个想法(这些人是如何做到的)或这些东西是如何工作的就足以让我开始我的工作。
最佳答案
你不能这么简单地解决你的问题。您的问题是计算查看页面的唯一用户(可能带有时间组件)。如评论中所述,您有几个问题。首先是确定您在计算什么。对于原型(prototype),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 ;
关于php - 计算帖子被查看的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706941/