我们必须制定一个投票系统,让用户投票给不同职位的各种候选人。选民登录了。你如何存储一个选民的投票然后将该投票添加到以前的投票中?唯一可行的方法是对数据库进行每次投票吗?但是数据库的结构会是什么样子?你怎么算呢?
编辑:
投票系统不只有一组候选人投票。它有市长,副市长,参议员等。有太多。这就是为什么我很困惑。如果它只是一个总统的投票系统,那就更容易了。因此,如果我为选民提供一张桌子,并且有一张他/她的选票候选人,那么由于选民投票给很多候选人,所以这是不可能的。
答案 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