Как убедиться, что пользователи могут голосовать только один раз за пост - PullRequest
0 голосов
/ 18 ноября 2011

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

В настоящее время я думал о том, чтобы в моей базе данных user mysql было поле, содержащее список id с (соответствующих сообщениям), за которые пользователь уже проголосовал.Каждый раз, когда пользователь голосует, массив проверяется на соответствие текущей записи id.Если обнаруживается сообщение об ошибке, если нет, голосование проходит, и id теперь является частью списка «уже проголосовавших» пользователя.

Это кажется странным способом сделать это.Это эффективный метод?Какой метод будет лучше / лучше?

1 Ответ

3 голосов
/ 18 ноября 2011

Я бы создал отдельную таблицу с именем 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...