投票系统 - 如何在MySQL中存储所有投票以及如何正确计算结果

时间:2009-06-12 23:05:27

标签: php mysql

我正在开发一个系统,允许用户使用是/否/可能问题集对不同主题进行投票。

每个问题将加权为2(是)/ 0(否)/ 1(可能)注意(用户将多次投票,可能数额巨大)

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

  1. 我是否单独存储每张投票? (身份证/投票/)

  2. 对投票结果进行统计的正确查询是什么?

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

4 个答案:

答案 0 :(得分:3)

您需要做的第一个主要原因是确保没有重复投票(例如,使用此记录投票的商店IP地址)。

如果你寻求出色的表现,你可以做digg.com(根据演讲)为这种性质的事情做的事情。他们将所有投票存储在一个带有IP的memcached节点中,以防止重复约24小时到期。然后他们有一个守护进程/ cron作业来计算投票并将它们以聚合格式存储在持久/ db层。

答案 1 :(得分:1)

我不会将加权值存储在数据库中,而是将数据库用作3种不同类型投票的计数系统。你可以有一个包含3个字段的表

字段:是,不,也许,所有整数。最初将字段值设置为0.每次投票时,都会增加相应的字段值。

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

这当然是投票总数很重要,而你并不关心单独存储每个选民的偏好。

为了确保唯一性,我首先要让用户注册,这样您就可以将用户标记为已经为该特定投票投票,因此他们无法再次投票。但是,他们总是可以再次注册。不幸的是,很难解决这个问题,因为他们可以简单地使用另一台计算机,一个代理服务器,或者很多人拥有动态IP,这只需要重新启动调制解调器即可再次投票,即使你确实存储了IP来限制这种情况。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我认为你只需将每个投票存储起来用于审计或记录目的。

我猜你可以在一行中完成所有问题。

这样:

  

Voteid Questionid VoteTally

然后你可以在选举中运行更新。当是,添加2,当可能时,添加1,当不,什么也不做。

您是否要使用状态栏将结果显示给用户?如果是的话,那么你需要存储信息。