2011-11-18 73 views
0

我正在建立一个网站,其中有一个功能可以重新组合SE的投票系统。我试图限制用户每次发帖不止一次投票。如何确保用户每个帖子只能投票一次

目前,我正在考虑在我的user mysql数据库中有一个字段,它会保留用户已投票的id(对应于帖子)的列表。每次用户投票时,阵列都会根据当前帖子的id进行检查。如果发现错误消息,则表示如果没有投票,则id现在是用户“已投票”列表的一部分。

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

回答

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) 

基本上说“插入,除非有一个独特的按键冲突,如果是的话,忽略”(如果你只是想保持第一选票)。

相关问题