2011-07-20 136 views
3

我正在尋找上下投票系統的幫助。投票系統存在邏輯問題

目前,我有一個引用投票的用戶,誰是投給了用戶,並且在投票

CREATE TABLE parking_spots_votes(
vote_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 

parking_spot_id INTEGER DEFAULT NULL, 
    key parking_spot_id_fk (parking_spot_id), 
    FOREIGN KEY (parking_spot_id) REFERENCES parking_spots(id), 

uploaded_by_user_id INTEGER DEFAULT NULL, 
    key user_id_fk (uploaded_by_user_id), 
    FOREIGN KEY (uploaded_by_user_id) REFERENCES parking_angel_users(id), 

vote_casted_user_id INTEGER DEFAULT NULL, 
    key vote_cast_user_id_fk (vote_casted_user_id), 
    FOREIGN KEY (vote_casted_user_id) REFERENCES parking_angel_users(id), 

vote_type INTEGER NOT NULL 
) 

投票類型可以是資料片(停車位)表決表0爲無表決權,1爲投票權,2爲downvote

現在我有一點邏輯麻煩。

例如如果

  1. 用戶已經投票在parking_spot
  2. 如何檢查,如果用戶已經投票,如果他沒有再插入,但如果他有那麼不已經投票了。

  3. 如何更新用戶(uploaded_by_user_id)分數。加上一個贊成票和減去一個贊成票。

所以一般流程是,

用戶按下了表決,如果已經投給了已經,如果這樣,那麼你不能再次投票服務器檢查。 if not then vote_casted_user_id =當前用戶,parking_spot_id =當前信息,uploaded_by_user_id =上傳信息的人, 然後uploaded_by_user得分將根據投票類型更新。

我正在使用java連接到MYSQL數據庫的JDBC連接。

對我而言有什麼想法?

+2

所以做事情佛羅里達州。 – Moonbeam

回答

1

您可以考慮設置你與parking_spot_id,uploaded_user_id主鍵,casted_user_id

所以當一票來自於相同的上載用戶的同一停車點相同的用戶,您可以捕獲該異常,並處理它說:「你有已經投票!「

如果你不喜歡這個 可以通過保存票寫一個選擇獲得的記錄數與parking_spot_id,uploaded_user_id,casted_user_id之前編寫自己的控制機制

處理過程中如果計數大於0這意味着已經有一個投票然後不保存並給你的消息。否則保存你的投票並選擇用戶的分數通過投票增加它並更新記錄。

希望這會有所幫助。

3
  1. 如果用戶已經對parking_spot投了票,該怎麼辦?
  2. 我如何檢查用戶是否已經投票,如果他沒有再插入,但是如果他已經沒有投票已經投票。

這些基本上是同樣的問題:我如何測試一個用戶是否已經投票在parking_spot?那麼,只需運行一個查詢來獲取parking_spot_id和vote_casted_user_id匹配的記錄。

如何更新用戶(uploaded_by_user_id)分數。加一個贊成票和減去一個贊成票的贊成票?

如果沒有太大的麻煩,我會將vote_type的值更改爲+1,對於upvote則爲+1,downvote則爲-1。然後,它只是一個SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

我希望這有助於