Мы должны создать систему голосования, которая заставляет пользователей голосовать за разных кандидатов на разных должностях. Для избирателей есть логин. Как вы храните голосование одного избирателя, а затем получаете этот голос, добавленный к предыдущим голосам? Единственный возможный способ – сохранить все голоса в базе данных прямо? Но как выглядит структура базы данных? И как вы считаете это?
редактировать:
В системе голосования нет только одной группы кандидатов для голосования. У него есть мэр, вице-мэр, сенатор и т. Д. Их слишком много. вот почему я смущен. Если бы это была просто система голосования президента, было бы легче. Поэтому, если у меня есть таблица для избирателя, со столбцом его / ее избранного кандидата, это невозможно, поскольку избиратель голосует за многих кандидатов.
Лучше всего было бы иметь другую таблицу для хранения голосов. И эта таблица будет иметь два атрибута (VoterId, CandidateId). И вы можете получить подсчет голосов, если вы разрешаете несколько голосов из этой таблицы.
Но было бы лучше сделать VoterId основным ключом в этой таблице. Чтобы избежать множественного голосования
CandidateType : – (TypeId (PK), typeName, maxVotePerVoterForThisType)
Таблица избирателей : – (voterId (PK), voterName, otherInfo)
Таблица кандидатов : – (кандидат (PK), кандидатName, избирательный округ, otherInfo, TypeId (FK))
Голосов : – (voterId (PK, FK), TypeId (PK, FK), кандидатId (FK))
* EDIT: – схема отредактирована с измененным требованием в исходном сообщении
* EDIT: – Добавлено поле в таблице CandidateType, чтобы разрешить multiple votes
. (Например: теперь избиратель может голосовать за 10 Senators
, если для maxVotePerVoter
для этого типа установлено значение 10 ..)
Вы должны хранить каждого кандидата в таблице, позиции в другой таблице, а затем создавать отношения на основе идентификатора, система голосования относительно проста:
база данных:
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
Эти 3 таблицы необходимы для ваших учетных записей (избирателей) и кандидатов.
Account: Id (PK), Name, Password Candidates: Id (PK), Name Votes: AccountId (PK), CandidateId (PK)
Вставьте строку в голоса при подаче голоса. Это предотвращает дублирование голосования из-за ПК.
Я просто говорю, что могу хранить голосующих пользователей в таблице, называемой пользователями, и вы можете использовать vaotecount
(int) типа initilize с нулем и отслеживать их ip и голосовать за идентификатор темы, на который они проголосовали, и когда они проголосовали за вас можно проверить с помощью IP и topic_id, что они не голосуют дважды, и если они vaotecount
вы можете vaotecount
поле vaotecount
на один
и пока вы рассчитываете на подсчет голосов, пользователи с идентификатором темы, для которого вы подсчитываете голоса. Простой: D
Из объяснения проблемы я могу предложить вам следующую структуру базы данных:
tlbUserVote:
UserID(PK) | UserName | Vote | CandidateId(FK)
tlbCandidate:
CandidateId(PK) | CandidateName | TotalVotes
По этой структуре вы можете добавлять текущие голоса с предыдущими (сначала беря предыдущие голоса и добавляя их к текущему).
Также будут обновлены итоговые голоса кандидатов.