我有一个博客/论坛系统upvotes/downvote和每个评论也可以有upvote/downvote像reddit/stackoverflow系统。PHP/MYSQL用户博客/论坛投票系统
哪种方法可以确保已经投入使用的用户无法再次提供投票?
我确实考虑过创建一个带有单独upvote表的新行的可能性。但是如果一篇文章有30条评论,那么脚本最终会做30条数据库查询,这也会给我的服务器带来巨大的负担。另一种可能性是为用户的每个upvote做一行,一起查询它们并检查post_id,这又是不可行的。
那么哪个是upvote/downvote系统的最佳方式,以及像stumbleupon/reddit这样的网站做什么?就在他登录的那一刻,他可以看到一个红色的颜色,可能是他已经投了票的帖子
我会做的是做一个单独的数据库表,每个职位有一个行,每行有一列存储已投票的用户数组。所以基本上如果用户1,2,5和8都投了票,你可以将它存储为[1,2,5,8](作为json存储,所以你可以'json_decode'它稍后使用它。1数据库调用 – GrumpyCrouton
“该脚本最终会做30个数据库查询“为什么?如果用户提出了特定的评论,那么您只需要检查一个评论,看看他们是否投票过它。这是一个非常简单的SQL查询来做到这一点。在评论表中加入评论ID的投票表,并且包含用户ID以及它是否是向上/向下投票,然后你对评论ID /用户ID组合进行查询,他们不太可能尝试并投票全部30个,如果你认为这是一种可能性,那么你需要设计你的系统足够的规模,和/或使用足够强大的硬件。 – ADyson
*“另一种可能性是为每个用户upvote做一排,查询它们并检查post_id又是不可行的。“* ...为什么这是不可行的?听起来像一个简单的连接用户ID,问题ID(作为复合PRIMARY KEY可能)和投票记录(+1或-1作为签名TINYINT(2)) – CD001