【问题标题】:Most viewed posts in the last 21 days过去 21 天内浏览次数最多的帖子
【发布时间】:2012-03-16 16:11:02
【问题描述】:

我正在尝试使用 php 创建一个博客系统,我需要一种方法来计算过去 21 天内浏览次数最多的帖子。有人知道这样做的好方法吗?

我对 php 没有太多经验,所以我需要有人指出我正确的方向。我试图研究谷歌分析 API,但它似乎有点复杂。只使用 cookie 会更容易吗?

【问题讨论】:

  • 提问的时候需要多花点功夫。你的桌子的结构是什么?你试过什么?有大量的教程和博客文章涵盖了这个主题。

标签: php mysql cookies google-analytics-api


【解决方案1】:

由于您正在构建自己的博客系统,这里是最简单的方法:

我认为这是对您的博客文章访问次数的匿名计数。如果你想有 ip 记录的记录,你必须调整业务逻辑。

  1. 创建一个名为访问的新表。
  2. 添加一个 id(主键)、一个名为 blogpostid 的字段(将存储正在查看的帖子的 id)和一个名为 dtpost 的字段,该字段具有时间戳或日期时间属性,插入时会自动放置日期/时间。李>

现在可以这样查询了:

select visits.blogpostid, count(dtpost) as counted from posts 
left join posts on posts.id = visits.blogpostid 
where dtpost between (NOW() AND <-21 days interval function>) 
order by counted DESC group by visits.blogpostid;

您真正要做的是存储访问您博客文章的人的日期时间。这会自动成为一个计数,因此无论您在其间放置的任何时间间隔都会获取数据 *.然后 count() 函数进行计数。

要知道的一点是,您自己的浏览器刷新会增加访问次数,因此您必须提供一种方法来阻止计算浏览器的刷新次数(通常是时间限制或 cookie 来表示你已经看过那个页面了)。

*编辑: 由于这是模棱两可的,我的意思是它会在您想要的时间段内获取您的数据。

【讨论】:

    【解决方案2】:

    使用外键创建一个表views 以发布ID,并添加一个包含访问者信息和日期的条目。然后,您可以像这样获取观看次数最多的帖子(未经测试):

    SELECT p.*, COUNT(p.*) count FROM posts p
    INNER JOIN views v ON v.post_id = p.id
    WHERE DATE_SUB(CURDATE(), INTERVAL 21 DAY) <= p.date_viewed
    ORDER BY count DESC
    GROUP BY p.id;
    

    【讨论】:

    • 向表中添加数据时,不要忘记过滤掉机器人并决定您是跟踪独特的帖子视图还是原始帖子视图。
    【解决方案3】:

    为了防止同一用户多次查看时计数增加,您可以使用会话机制来防止这种情况发生。

    session_start();
    
    if (!isset($_SESSION['posts_viewed'])) {
        $_SESSION['posts_viewed'] = array();
    }
    
    // some logic to get to relevant post id here
    
    // check that the post_id is not in the array
    if (!in_array($post_id, $_SESSION['posts_viewed'])) {
    
         // logic to increment a persistent counter (e.g. in mysql) here
    
         // add post_id to array
         array_push($_SESSION['posts_viewed'], $post_id); 
    }
    
    // finally some logic that display the post here
    
    session_close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2021-09-15
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多