php - 计算帖子被查看的次数

标签 php sql

我正在做一个项目,主页上只显示帖子的标题,点击标题时,完整的帖子会加载到另一个页面 posts.php 代码是:

<a href="posts.php?postId=<?php echo $row['posts_id'] ?>"><?php echo $row['title']; ?></a>

现在要计算帖子浏览量,我的 posts 表中有一列 hitshits 的初始值设置为 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/

相关文章:

php - 这个 MySQL 语法错误是怎么回事?

Php 代码结果与 mySQL 查询不匹配

php - 获取 JSON 数据

java - 遍历 ORM 关系返回重复结果

SQL:使用函数作为存储过程的参数

php - PDO FETCH_CLASS 和命名空间问题

php - 这三个sql查询有什么区别?

mysql - 为什么这个左连接只返回一条记录?

mysql - 如何正确连接三张表

mysql - 使用 MySQL 查询模拟移动时间线