【问题标题】:managing View Count of webpage管理网页的查看次数
【发布时间】:2012-07-13 21:00:05
【问题描述】:

我正在创建一个显示单个新闻项目的 jsp 页面,就像此 StackOverflow 页面上的单个问题一样。我需要将视图计数存储在数据库中。

我可以通过这种方式简单地增加数据库中的视图计数:

`UPDATE table SET views=views+1 WHERE newsId=4458;`

但是,如果单个用户一次又一次地点击该页面,比如说 50 次...在这种情况下,我的查看次数将不代表该网站的唯一访问者。我怎样才能避免这种情况?

我想要类似 StackOverflow 的查看计数系统。

【问题讨论】:

  • 可能会在会话中保留一个变量,以确保数据库中的访问是否更新。会话特定于用户/浏览器,因此会同步。

标签: database


【解决方案1】:

一种解决方案可能是您创建一个新表(假设它称为视图),其中包含以下列“viewid”“newsid”“ipaddress”(显然newsid 是外键) 每次有人访问您的网站时,您都会检查他的 ip 是否已经在该新闻项目的该表中。

Select count(*) AS count FROM views WHERE newsid=1234 AND ipaddress=123.456.125

如果 count 等于 0,你就这样插入

INSERT INTO views('newsid', 'ipaddress') VALUES(1234, 123.146.125)

现在当您想要获取观看次数时:

Select count(*) AS count FROM views WHERE newsid=1234

您可以通过在表格视图中添加另一个名为“count”和“lastviewed”(类型 datetime)的列来增强此功能。 假设如果日期不匹配,您允许再次计算每个 ip。 这样您将获得非常准确的观看次数:)

要获取新的观看次数,您只需使用 SUM 即可

Select SUM(count) AS count WHERE newsid=1234

祝你好运:)

【讨论】:

    【解决方案2】:

    您可能想参考 spencer7593 的回答 here,他基本上建议同时拥有 (1) 一个查看计数列,用于快速生成您的网页和 (2) 一个单独的查看表,该表记录用户 ID 和相关时间戳为了分析,每个视图。

    我建议在确定是否应增加查看计数列时,还可以使用此查看表来查询是否在最后一天(或一周)内对具有特定内容的特定用户进行了查看。通过检查某个项目的视图是否仅在最后一天(或一周)发生,数据库查询应该会大大降低成本,同时仍然保护您的视图计数的完整性。

    【讨论】:

      【解决方案3】:

      我说在 Javscript 中使用计数器。在正文 onclick 上增加变量。例如:

      <script language=”javascript”>
      function pageCounter()
      {
      var counter = 0;
      counter = counter++;
      
      }
      </script>
      
      <body onclick = “pageCounter()”>
      

      您可以使用 onclose 更新值..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        相关资源
        最近更新 更多