PHP / MySQL多票

时间:2013-02-26 17:35:03

标签: php mysql

您好我的网站上有投票系统,但我想禁用用户的多次投票。如果用户投票他/她不能再投票。这是我有一个解决方案,但不是很好的imo。

我在用户表中创建了一个列:users_avoted我会在其中存储他/她投票的文章ID:

1|2|5|6 

由此我可以检查用户是否已经投票。但问题是会有很多文章,因此VARCHAR(255)不足以存储所有这些ID。还有其他解决方案吗?

由于

3 个答案:

答案 0 :(得分:5)

不要那样反规范化。只需要一个两列表uservotes,其中包含UserID和ArticleID的复合键。

示例数据:

  userid  | articleid
   1          1
   1          2
   1          67
   2          1

这比

更好
  userID    | articleID
    1         1,2,67

您建议使用的是什么。请不要这样做,并保持标准化,除非你每次询问时都想做体操。详细说明,实现你的建议会破坏使用RDBMS的目的,以便“欺骗”一个特定的查询。

答案 1 :(得分:0)

您可以改为制作如下表格:

users_avoted {
    article_id,
    user_id,
    answer_id
}

使用article_id和user_id创建唯一索引。这只会允许输入一条记录。

所以,他们说在第2条上选择选项5,他们是用户1。

现在,当您尝试插入表格时:

INSERT INTO users_avoted VALUES (2, 1, 5)

你不能因为用户已经投票了。


此方法的好处是您无需先检查他们是否已经投票。

答案 2 :(得分:0)

将投票存储在如下表格中:id,username,voter id,vote。例如。

然后当用户投票时,检查该表是否匹配行。

例如:

if ($username == $dbusername && $voteid == $dbvoteid){
     $disallowed = true;
}