使用PHP + MySql的投票系统?

时间:2012-09-23 08:58:57

标签: php mysql

我们必须制定一个投票系统,让用户投票给不同职位的各种候选人。选民登录了。你如何存储一个选民的投票然后将该投票添加到以前的投票中?唯一可行的方法是对数据库进行每次投票吗?但是数据库的结构会是什么样子?你怎么算呢?

编辑:
投票系统不只有一组候选人投票。它有市长,副市长,参议员等。有太多。这就是为什么我很困惑。如果它只是一个总统的投票系统,那就更容易了。因此,如果我为选民提供一张桌子,并且有一张他/她的选票候选人,那么由于选民投票给很多候选人,所以这是不可能的。

5 个答案:

答案 0 :(得分:3)

更好的方法是使用不同的表来存储投票。那个表将有两个属性(VoterId,CandidateId) 如果你允许从这张表中多次投票,你可以获取投票数。

但最好将VoterId作为此表中的主键...以避免多次投票

  

CandidateType : - (TypeId(PK),typeName,maxVotePerVoterForThisType)

     

选民表: - (voterId(PK),voterName,otherInfo)

     

候选人表: - (candidateId(PK),candidateName,选区,   otherInfo,TypeId(FK))

     

投票: - (voterId(PK,FK),TypeId(PK,FK),candidateId(FK))

*编辑: - 使用原始帖子中的更改要求编辑的模式

*编辑: - 在CandidateType表中添加了一个字段以允许multiple votes。(例如:如果此类型的10 Senators设置为10,则选民可以投票maxVotePerVoter。 。)

答案 1 :(得分:1)

您应该将每个候选人存储在一个表中,在另一个表中的位置然后根据ID建立关系,投票系统相对简单:

数据库:

id, position_id, candidate_id, votes

然后PHP

$query = "UPDATE `votes` SET `votes`=`votes`+1 WHERE `position_id`=1 AND candidate_id=1"; // adds 1 vote where position_id is 1 and candidate_id is 1

答案 2 :(得分:1)

这3个表格是您的帐户(选民)和候选人所必需的。

Account: Id (PK), Name, Password
Candidates: Id (PK), Name
Votes: AccountId (PK), CandidateId (PK)

投票时在投票中插入一行。这可以防止由于PK而导致的重复投票。

答案 3 :(得分:0)

从问题的解释,我可以建议你以下数据库结构:

tlbUserVote:

UserID(PK)  |  UserName  |  Vote  |  CandidateId(FK)

tlbCandidate:

CandidateId(PK)  | CandidateName | TotalVotes

通过这种结构,您可以将当前投票与之前的投票相加(先获得先前的投票并将其添加到当前投票中)。

候选人的总票数也会更新。

答案 4 :(得分:0)

我简单的语言我可以说你将投票用户存储在一个名为users的表中,你可以使用字段vaotecount(int)类型initilize with zero并跟踪他们的ip并投票给他们有的主题id投票,投票时你可以用IP和topic_id查看他们没有投票两次,如果他们通过你可以将vaotecount字段增加一个

当您计算投票时,计算具有您计算投票数的主题ID的用户。简单:D