1

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

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

1|2|5|6 

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

谢谢

4

3 回答 3

5

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

示例数据:

  userid  | articleid
   1          1
   1          2
   1          67
   2          1

这比类似的东西要好

  userID    | articleID
    1         1,2,67

这就是你所建议的。请不要这样做,并保持其正常化,除非您每次查询时都想做体操。详细地说,实施您的建议会破坏使用 RDBMS 的目的,以便“欺骗”一个特定的查询。

于 2013-02-26T17:39:07.223 回答
0

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

users_avoted {
    article_id,
    user_id,
    answer_id
}

从 article_id 和 user_id 中创建一个唯一索引。那将只允许为此输入一条记录。

所以,假设他们在文章 2 上选择了选项 5,他们是用户 1。

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

INSERT INTO users_avoted VALUES (2, 1, 5)

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


这种方法的好处是您不必检查他们是否已经先投票。

于 2013-02-26T17:39:28.273 回答
0

将投票存储在一个表格中,例如:id、username、voteid、vote。

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

例如:

if ($username == $dbusername && $voteid == $dbvoteid){
     $disallowed = true;
}
于 2013-02-26T17:40:45.817 回答