0

我正在制作一个网站,这是一个新闻/博客类型的网站,人们可以在其中对所发表的帖子发表评论。然后登录的用户可以向上或向下发表评论。在我单击拇指时它工作正常,它使用 ajax 将计数添加到数据库并更新数字,它还阻止该人再次单击拇指,但是如果您按 f5 刷新页面,您可以再次单击大拇指。我怎样才能阻止这种情况发生?将此添加到数据库是我正在考虑的一个选项,但该站点需要能够处理大量评论,并且用户可能会对评论做出数千个拇指,因为它执行数据库表的简单操作在之后会很大很短的时间肯定会减慢页面加载速度,因为每次查看带有评论的页面时它都会查询一个非常长的表。

目前我在评论表中保持竖起和向下的拇指数,因此它会查询评论表并显示数字。如果有人竖起大拇指,您是否建议我添加一个包含用户 ID 和评论 ID 的新表,以便我可以查询该表,并且如果有一行用户 ID == 登录用户和评论 ID == 评论不允许?如果是这样,这就是我对如何做的想法,但正如我上面所说,它会导致一个巨大的表格,这肯定会减慢页面的加载速度

4

2 回答 2

0

您不应该将点击存储为简单的计数器,而是存储实际事件

创建一个名为“clicklog”或其他名称的单独表,并添加诸如userid, commentid,之类的字段IsThumbsUp。然后在您的 ajax 页面中,您可以将竖起大拇指添加到此表中(IsThumbsUp是一个布尔值。True 表示竖起大拇指,而 false 表示向下表示。

然后而不是使用像SELECT comment, thumbsUp, thumbsDown你可以使用的东西

SELECT id, comment,
       (SELECT count(commentid) FROM clicklog WHERE commentID=id AND IsThumbsUp=1) AS thumbsUp,
       (SELECT count(commentid) FROM clicklog WHERE commentID=id AND IsThumbsUp=0) AS thumbsDown
FROM comments

此外,在您的 AJAX 页面中,您还可以检查用户之前是否投票过。如果他有,不要允许。甚至更好。当他投票赞成时,他可以将其更改为投票反对(将 IsThumbsUp 从 1 更改为 0)或反之亦然。

只要确保每个用户只有一个与commentid 和userid 的连接。

还要确保在 clicklog 中的字段上放置索引以快速获取信息。我将主键放在commentiduserid组合,然后将单独的索引放在commentidIsThumbsUp组合

于 2012-12-17T15:19:06.500 回答
0

一种方法是当您加载评论时,如果该用户已经对每个评论进行了投票,则如果该用户已经投票,则禁用大拇指按钮。

于 2012-12-17T15:18:14.070 回答