如何确保用户每个帖子只能投票一次

时间:2011-11-18 04:53:05

标签: php mysql restrictions voting-system

我正在建立一个网站,其中包含一个可以重新使用SE投票系统的功能。我试图限制用户每个帖子多次投票。

目前,我正在考虑在我的user mysql数据库中设置一个字段,该字段将保留用户已经投票的id列表(对应于帖子)。每次用户投票时,都会根据当前帖子id检查数组。如果找到,则显示错误消息,如果没有,则投票通过,id现在是用户“已经投票”列表的一部分。

这似乎是一种奇怪的做法。这是一种有效的方法吗?什么方法会更好/更好?

1 个答案:

答案 0 :(得分:3)

我会创建一个名为user_post的单独表,它具有user_id和post_id - 事实上,您可以将这些列设为多列主键。

当用户对帖子投票时,您可以使用以下查询:

REPLACE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)

替换基本上是说'插入除非存在唯一的密钥冲突,如果是,请更新行'。或者,您可以使用:

INSERT IGNORE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)

除非存在唯一的密钥冲突,否则基本上会说'插入,如果是,请忽略' (如果你只想保留第一票)。