2009-06-12 32 views
2

我正在开发一个系统,允许用户使用Yes/No/Maybe问题集对不同主题投票。投票系统 - 如何在MySQL中存储所有选票以及如何正确计算结果

每个问题都将被加权为2(是)/ 0(无)/ 1(也许)NOTE(该用户将被投票多次,潜在的巨大数额)

我的计划是存储在MySQL数据库中的答案。

  1. 我是否分别存储每张投票? (ID /投票/)

  2. 什么是相符的投票结果正确的查询?

  3. 什么是最有效的方式来存储和检索结果?我应该有一张存储投票分数的表格吗?

+0

我认为这是http://stackoverflow.com/questions/809916/best-practice-for-comment-voting-database-structure和其他问题的副本。 – 2009-06-12 23:10:06

+0

为了得到更准确的答案,您需要提供更多的细节。每个用户只能被允许投票一次吗?你是否需要知道每个问题有多少个“是”,“否”和“可能”答案(例如投票)? – 2009-06-12 23:13:28

+0

使用count()会不好? – johnny 2009-06-12 23:20:50

回答

3

,你需要做的#1最主要的原因是,以确保没有重复投票(每个表决投与该记录例如商店的IP地址)。

如果你在寻找出色的表现,你可以做一些digg.com(根据讲座)对于这种性质的某些东西。他们将所有投票存储在带有IP的memcached节点中,以防止到期时间为〜24小时的重复。然后他们有一个daemon/cron作业来计算投票并将它们以聚合格式存储在persistent/db层。

0

我在想你只需要存储每个人的投票,以进行审计或记录目的。

我猜你可以在每个问题的一行中做到这一切。

这样:

Voteid Questionid VoteTally

然后你可以只运行在votetally更新。如果是的话,加2,或许加1,否则不做。

您打算使用状态栏将结果显示回用户吗?如果是这样,那么是的,你需要存储信息。

1

我不会加权值存储在数据库中,而不是我会使用DB作为理货系统,3种不同类型的选票。你可以用它

场3场1个表:是,否,也许,所有的整数。最初将字段值设置为0.每次进行投票时,递增适当的字段值。

之后,在你的代码中进行加权运算。作为一个例子,就像乘以数字一样简单,例如在“是”字段中加2来获得加权结果。

这是当然的,如果投票总计事,你不关心单独存储每个个体选民的偏好。

为确保唯一我想要使用户第一次注册了,这样你可以标记,用户如已经投票支持特定的民意调查,所以他们不能再次投票。不过,他们总是可以再次注册。不幸的是,这很难解决,因为他们可以简单地使用另一台计算机,一台代理服务器或许多人拥有动态IP,即使您存储了IP来限制这些情况,也只需要重新启动调制解调器即可重新投票。

1

需要考虑的一件事:分别存储每个投票可以更容易地限制IP投票。