我们必须制作一个投票系统,让用户在不同的职位上为不同的候选人投票。有一个投票者的登录名。如何存储一个投票者的选票,然后将该选票与之前的选票相加?唯一可能的方法是将每一次投票都存储在数据库中,对吗?但是数据库的结构会是什么样子呢?你是如何计算的呢?
编辑:
投票系统并不是只有一组候选人可以投票。它有市长、副市长、参议员等,人数太多了。这就是我困惑的原因。如果这只是一个总统的投票系统,那就容易多了。所以如果我有一个表给投票者,有一列他/她投票的候选人,这是不可能的,因为投票者投票给许多候选人。
发布于 2012-09-23 17:07:37
一种更好的方法是使用不同的表来存储投票。该表将有两个属性(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))
*EDIT:-在原始帖子中使用更改的需求编辑模式
*编辑:-在CandidateType表中添加了一个允许multiple votes的字段。(例如:如果10 Senators类型的maxVotePerVoter设置为10,则现在投票者可以投票给此类型。)
发布于 2012-09-23 17:03:02
你应该将每个候选人都存储在一个表中,将位置放在另一个表中,然后根据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发布于 2012-09-23 17:05:45
这3个表是您的帐户(投票者)和候选人所必需的。
Account: Id (PK), Name, Password
Candidates: Id (PK), Name
Votes: AccountId (PK), CandidateId (PK)在投票时,在投票中插入一行。这可以防止由于PK导致的重复投票。
https://stackoverflow.com/questions/12550995
复制相似问题