我正在研究一个项目,我遇到了一个逻辑问题。
我们的项目是一个问答网站。与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如何处理?
答案 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