1

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

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

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

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

我想要 StackOverflow 的视图计数系统之类的东西。

4

3 回答 3

1

一个解决方案可能是你创建一个新表(让我们说它称为视图),每次有人访问你的网站时,你检查他的 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”(键入日期时间)的列来增强这一点。假设如果日期不匹配,您允许再次计算每个 ip。这样,您将获得非常准确的观看次数:)

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

Select SUM(count) AS count WHERE newsid=1234

祝你好运 :)

于 2012-07-13T21:25:08.767 回答
1

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

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

于 2015-06-11T11:23:05.623 回答
0

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

<script language=”javascript”&gt;
function pageCounter()
{
var counter = 0;
counter = counter++;

}
</script>

<body onclick = “pageCounter()”&gt;

您可以使用 onclose 更新值。

于 2012-07-13T21:24:40.507 回答