你好我的網站上有投票系統,但我想禁用用戶的多個投票。如果用戶投票,他/她不能再投票。這是我有的一個解決方案,但不是很好。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