您好我的网站上有投票系统,但我想禁用用户的多次投票。如果用户投票他/她不能再投票。这是我有一个解决方案,但不是很好的imo。
我在用户表中创建了一个列:users_avoted
我会在其中存储他/她投票的文章ID:
1|2|5|6
由此我可以检查用户是否已经投票。但问题是会有很多文章,因此VARCHAR(255)
不足以存储所有这些ID。还有其他解决方案吗?
由于
答案 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;
}