2013-02-26 95 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; 
}