2013-02-26 64 views
1

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

我在用户表中创建一个列:users_avoted在那里我将存储的文章,他/她投像tihs的ID:

1|2|5|6 

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

谢谢

回答

5

不要这样去规范化。只需要一个包含UserID和ArticleID的组合键的两列表userVotes。

示例数据:

userid | articleid 
    1   1 
    1   2 
    1   67 
    2   1 

这比像

userID | articleID 
    1   1,2,67 

这是它看起来像你的建议更好。请不要这样做,并保持它的正常化,除非你想在每次查询时做体操。详细说明一下,实施你的建议将会破坏使用RDBMS的目的,以便“欺骗”一个特定的查询。

+0

感谢完美的作品:) – 2013-02-26 18:25:19

0

你可以做,而不是一个表所示:

users_avoted { 
    article_id, 
    user_id, 
    answer_id 
} 

做一个唯一索引出的article_id和USER_ID的。这只会允许为此输入单个记录。

所以,说他们选择的第2选择5,和他们的用户1.

现在,当你试图插入到表:

INSERT INTO users_avoted VALUES (2, 1, 5) 

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


这种方法的好处是,你不必检查,如果他们已经投票第一。

0

将表格存储在表格中,如:id,username,voteid,vote for example。

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

例如:

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