2017-07-27 38 views
1

我正在開展一個項目,並且遇到了一個邏輯問題。如果投票沒有降低聲譽,我該如何避免聲譽增加?

我們的項目是一個問答網站。與StackOverflow完全一樣。問題是關於投票系統。所有的政策都酷似SO (每個downvote -2代表,對問題+5每個給予好評,在回答+10和等)

好吧,假設這樣的:用戶具有1代表,他問了一個問題。他的問題贏得了1次倒退。我的觸發器將處理聲譽:

UPDATE users SET reputation = GREATEST(reputation - 2, 1) WHERE id = new.user_id 

所以他的名氣的數量將仍然1。現在,如果downvote收回,這觸發會增加他的名聲:

UPDATE users SET reputation = reputation + 2 WHERE id = new.user_id 

所以他的名氣的數量將是3(這不應該是)。這是一個合乎邏輯的問題。有什麼想法我該如何處理?或者SO如何處理?

+0

也許做一件事是聲望有真實的數字,並且顯示器會顯示1,如果真正的代表低於...但是,這將導致有時用戶不得不獲得超過1代表得到2 ... –

+0

@MartinVerjans我認爲關於你的想法已經......這不是什麼,但事實並非如此對我很好。 thx –

+0

您可以將實際值存儲在表中,並在檢索值時使用最大的函數。 – maraca

回答

1

使用,而不是基於交易的聲譽表:

create table user_rep (user_id int, rep_change int, rep_date datetime) 

,而不是更新的靜態表,插入一個交易到這個表中,並加入到用戶表

select user_id, sum(rep_change) as total_rep 
from user_rep 
group by user_id