2011-11-18 82 views
0

我正在建立一個網站,其中有一個功能可以重新組合SE的投票系統。我試圖限制用戶每次發帖不止一次投票。如何確保用戶每個帖子只能投票一次

目前,我正在考慮在我的user mysql數據庫中有一個字段,它會保留用戶已投票的id(對應於帖子)的列表。每次用戶投票時,陣列都會根據當前帖子的id進行檢查。如果發現錯誤消息,則表示如果沒有投票,則id現在是用戶「已投票」列表的一部分。

這似乎是一個奇怪的做法。這是一種有效的方法嗎?什麼方法會更好/最好?

回答

3

我會創建一個名爲user_post的單獨表,它具有user_id和post_id - 事實上,您可以使這些列成爲多列主鍵。

當用戶在投票後,您可以使用下面的查詢:

REPLACE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote) 

更換基本上是說,「除非插入有一個獨特的按鍵衝突,如果是這樣,更新行」。或者,你可以使用:

INSERT IGNORE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote) 

基本上說「插入,除非有一個獨特的按鍵衝突,如果是的話,忽略」(如果你只是想保持第一選票)。

相關問題