Как убедиться, что пользователи могут голосовать только один раз за пост
Я создаю веб-сайт, который имеет функцию, которая напоминает систему голосования SE. Я пытаюсь запретить пользователям голосовать более одного раза за пост.
В настоящее время я думал о наличии поля в моем user
База данных MySQL, которая будет хранить список id
s (соответствует сообщениям), за которые пользователь уже проголосовал. Каждый раз, когда пользователь голосует, массив проверяется на соответствие текущей записи id
, Если он найден, отображается сообщение об ошибке, если нет, голосование проходит и id
теперь является частью списка "уже проголосовавших" пользователя.
Это кажется странным способом сделать это. Это эффективный метод? Какой метод будет лучше / лучше?
1 ответ
Я бы создал отдельную таблицу с именем user_post, в которой были бы user_id и post_id - фактически, вы можете сделать эти столбцы первичным ключом из нескольких столбцов.
Когда пользователь голосует за сообщение, вы можете использовать следующий запрос:
REPLACE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)
Replace, по сути, говорит: "вставьте, если нет конфликта уникальных ключей, если это так, обновите строку". Или вы можете использовать:
INSERT IGNORE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)
который, по сути, гласит: "вставьте, если нет конфликта уникальных ключей, если так, игнорируйте" (если вы хотите сохранить только первый голос).