我正在建立一个网站,该网站具有类似于 SE 投票系统的功能。我试图限制用户在每个帖子中多次投票。
目前,我正在考虑在我的user
mysql 数据库中拥有一个字段,该字段将保留id
用户已经投票的 s 列表(对应于帖子)。每次用户投票时,都会根据当前帖子的id
. 如果找到,则会显示一条错误消息,如果没有,则投票通过并且id
现在是用户“已投票”列表的一部分。
这似乎是一种奇怪的做法。这是一种有效的方法吗?什么方法会更好/最好?
我正在建立一个网站,该网站具有类似于 SE 投票系统的功能。我试图限制用户在每个帖子中多次投票。
目前,我正在考虑在我的user
mysql 数据库中拥有一个字段,该字段将保留id
用户已经投票的 s 列表(对应于帖子)。每次用户投票时,都会根据当前帖子的id
. 如果找到,则会显示一条错误消息,如果没有,则投票通过并且id
现在是用户“已投票”列表的一部分。
这似乎是一种奇怪的做法。这是一种有效的方法吗?什么方法会更好/最好?
我将创建一个名为 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)
它本质上说“插入,除非存在唯一的密钥冲突,如果有,则忽略”(如果您只想保留第一个投票)。