我正在建立一个网站,其中包含一个可以重新使用SE投票系统的功能。我试图限制用户每个帖子多次投票。
目前,我正在考虑在我的user
mysql数据库中设置一个字段,该字段将保留用户已经投票的id
列表(对应于帖子)。每次用户投票时,都会根据当前帖子id
检查数组。如果找到,则显示错误消息,如果没有,则投票通过,id
现在是用户“已经投票”列表的一部分。
这似乎是一种奇怪的做法。这是一种有效的方法吗?什么方法会更好/更好?
答案 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)
除非存在唯一的密钥冲突,否则基本上会说'插入,如果是,请忽略' (如果你只想保留第一票)。