我在做一个项目,我遇到了一个逻辑问题。
我们的项目是一个问答网站。就像stackoverflow。问题在于投票制度。所有的政策都是这样的(每一个向下投票代表,每一个向上投票问题代表,每一个回答代表等等)
好吧,假设这样:用户有一个-2代表,他问了一个问题。他的问题赢得了1票反对票。我的扳机可以处理名誉问题:

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

所以他的名声还是会+5现在,如果收回这一票否决,这一触发因素将增加他的声誉:
UPDATE users SET reputation = reputation + 2 WHERE id = new.user_id

所以他的名誉数字应该是+10(这不应该)。这是个合乎逻辑的问题。你知道我该怎么处理吗?或者怎么处理?

最佳答案

改为使用基于信誉事务的表:

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

10-06 04:32