您好,我的网站上有投票系统,但我想禁用用户的多次投票。如果用户投票,他/她不能再次投票。这是我拥有但不是很好的一种解决方案。
我在用户表中创建了一个列:users_avoted
我将在其中存储他/她投票喜欢的文章的 ID:
1|2|5|6
由此我将能够检查用户是否已经投票。但问题是会有很多文章,所以VARCHAR(255)
不足以存储所有这些 ID。还有其他解决方案吗?
谢谢
不要那样去规范化它。只需有一个两列表 userVotes,其中包含 UserID 和 ArticleID 的复合键。
示例数据:
userid | articleid
1 1
1 2
1 67
2 1
这比类似的东西要好
userID | articleID
1 1,2,67
这就是你所建议的。请不要这样做,并保持其正常化,除非您每次查询时都想做体操。详细地说,实施您的建议会破坏使用 RDBMS 的目的,以便“欺骗”一个特定的查询。
您可以改为制作如下表格:
users_avoted {
article_id,
user_id,
answer_id
}
从 article_id 和 user_id 中创建一个唯一索引。那将只允许为此输入一条记录。
所以,假设他们在文章 2 上选择了选项 5,他们是用户 1。
现在,当您尝试插入表时:
INSERT INTO users_avoted VALUES (2, 1, 5)
你不能因为用户已经投票了。
这种方法的好处是您不必检查他们是否已经先投票。
将投票存储在一个表格中,例如:id、username、voteid、vote。
然后当用户投票时,检查该表是否匹配行。
例如:
if ($username == $dbusername && $voteid == $dbvoteid){
$disallowed = true;
}