首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何为像SO和yahoo answers这样的用户创建一个积分系统?(PHP)

我应该如何为像SO和yahoo answers这样的用户创建一个积分系统?(PHP)
EN

Stack Overflow用户
提问于 2010-04-13 00:05:21
回答 3查看 562关注 0票数 2

我正在为一个问答网站项目创建一个投票系统,在这个系统中,如果用户问了一个问题,他/她会失去-5分;回答一个问题+5,投票一个问题+1,等等(有点像这样和yahoo answers)

-->为了创建基本算术,我有一个"users_points“表,它将user_id和它们的总分联系起来。

代码语言:javascript
复制
+---+---------+
| 1 | 100     |
+---+---------+
| 2 | 54      |
+---+---------+

-->基本上,如果用户做了某些任务,它将+或-积分。我如何防止用户说投票一个答案100次。例:我希望用户每个问题只能投票一次,等等。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-13 00:07:40

您应该创建一个votes表,其中包含以下列:user_id, question_id, delta。Delta值是投票的值,应该是1或-1 (这样,您就可以执行SUM(delta)来查找问题的点值)。

要获得唯一性,请在(user_id, question_id).上创建唯一索引

票数 4
EN

Stack Overflow用户

发布于 2010-04-13 00:26:03

看看这个设计对你有没有帮助

您可以在所有适当的位置进行反规范化(例如,删除VoteType并将布尔值放在适当的位置)

票数 2
EN

Stack Overflow用户

发布于 2010-04-13 00:28:44

我会保存一个详细的日志,记录哪些用户投票了哪些内容。因此,您可能有一个包含以下列的表:

  • user_id (用户ID)
  • item_type (“问题”或“答案”-对项目类型使用枚举或外键类型table)
  • item_id (实际项目的ID,例如问题ID或答案ID)
  • up_down (枚举或布尔值,表示投票赞成还是反对))

为了计算用户的"rep",您的应用程序逻辑将遍历投票,如果问题被投票通过,则添加+5,如果答案被投票否决,则添加-1,依此类推。

为了便于访问,您可能会将聚合值存储在users/questions/answers表中。但将日志保留在后台的最大好处是,您可以定期重新计算rep,并且不会丢失任何内容。你还可以说出哪些用户对哪些内容投了赞成票(例如,当你稍后返回问题时,SO会显示哪些答案是橙色的)。

或者只使用Stack Exchange,会更容易;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2623469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档