你好我的网站上有投票系统,但我想禁用用户的多个投票。如果用户投票,他/她不能再投票。这是我有的一个解决方案,但不是很好。PHP/MySQL多个投票
我在用户表中创建一个列:users_avoted
在那里我将存储的文章,他/她投像tihs的ID:
1|2|5|6
从此我将能够检查用户是否已经投票。但事情是会有很多文章,所以VARCHAR(255)
将不足以存储所有这些ID。其他解决方案?
谢谢
你好我的网站上有投票系统,但我想禁用用户的多个投票。如果用户投票,他/她不能再投票。这是我有的一个解决方案,但不是很好。PHP/MySQL多个投票
我在用户表中创建一个列:users_avoted
在那里我将存储的文章,他/她投像tihs的ID:
1|2|5|6
从此我将能够检查用户是否已经投票。但事情是会有很多文章,所以VARCHAR(255)
将不足以存储所有这些ID。其他解决方案?
谢谢
不要这样去规范化。只需要一个包含UserID和ArticleID的组合键的两列表userVotes。
示例数据:
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 for example。
然后当用户投票时,检查该表是否有匹配的行。
例如:
if ($username == $dbusername && $voteid == $dbvoteid){
$disallowed = true;
}
感谢完美的作品:) – 2013-02-26 18:25:19