Как убедиться, что пользователи могут голосовать только один раз за пост

Я создаю веб-сайт, который имеет функцию, которая напоминает систему голосования SE. Я пытаюсь запретить пользователям голосовать более одного раза за пост.

В настоящее время я думал о наличии поля в моем user База данных MySQL, которая будет хранить список ids (соответствует сообщениям), за которые пользователь уже проголосовал. Каждый раз, когда пользователь голосует, массив проверяется на соответствие текущей записи 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)

который, по сути, гласит: "вставьте, если нет конфликта уникальных ключей, если так, игнорируйте" (если вы хотите сохранить только первый голос).

Другие вопросы по тегам