如果投票没有降低声誉,我怎样才能避免声誉增加?

时间:2017-07-27 08:18:10

标签: mysql sql algorithm

我正在研究一个项目,我遇到了一个逻辑问题。

我们的项目是一个问答网站。与StackOverflow完全一样的东西。问题在于投票系统。所有政策都与SO (每个downvote -2代表,每个问题+5的投票,回答+10等等)

完全相同

好的,假设:用户有1个代表,他会问一个问题。他的问题获得了1个downvote。我的触发器将处理声誉:

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

所以他的声誉数量仍为1。现在,如果收回该下注,这个触发器将增加他的声誉:

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

因此,他的声誉数量为3 (不应该是)。这是一个合乎逻辑的问题。有什么想法我该如何处理?或者SO如何处理?

1 个答案:

答案 0 :(得分:1)

使用基于信誉交易的表格:

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

而不是更新静态表,将事务插入此表并加入users表

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