2

我们必须建立一个投票系统,让用户投票给不同职位的不同候选人。有一个选民登录。您如何存储一个选民的投票,然后将该投票添加到之前的投票中?唯一可能的方法是将每张选票存储在数据库中,对吗?但是数据库的结构会是什么样子呢?你怎么计算它?

编辑:
投票系统不仅有一组候选人可以投票。有市长、副市长、参议员等等,太多了。这就是为什么我很困惑。如果只是一个总统的投票系统,那就更容易了。因此,如果我有一张选民表格,其中有一列他/她投票的候选人,这是不可能的,因为选民投票给了许多候选人。

4

5 回答 5

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,如果maxVotePerVoter此类型设置为 10..)

于 2012-09-23T09:07:37.357 回答
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
于 2012-09-23T09:03:01.743 回答
1

您的账户(选民)和候选人需要这 3 个表格。

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

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

于 2012-09-23T09:05:44.657 回答
0

从问题的解释中,我可以建议您使用以下数据库结构:

tlb用户投票:

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

tlb候选人:

CandidateId(PK)  | CandidateName | TotalVotes

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

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

于 2012-09-23T09:06:18.340 回答
0

我可以说您将投票用户存储在名为 users 的表中,您可以使用字段vaotecount (int)类型初始化为零并跟踪他们的 ip 并为他们投票的主题 id 投票,当他们投票时,您可以检查 IP 和 topic_id 他们没有投票两次,如果他们通过了,您可以将该vaotecount字段增加一

当您计票时,请计算您为其计票的主题 id 的用户。简单:D

于 2012-09-23T09:18:18.677 回答