在简单的MySQL更新语法上苦苦挣扎几个小时。表的votesum
列是vote1
+ vote2
列的总和。如果有几个彼此相等的votesum
值(如下面的示例,则为20和20),对于具有较高votesum
值的行,我需要将vote1
加1。
表:
id|vote1|vote2|votesum
1|10 |10 |20
2|5 |15 |20
3|2 |2 |4
4|1 |1 |2
我正在寻找的MySQL更新语法应检查是否最大数量的
votesum
是单独的,或者是否有更多相等的票数值。如果有两个(或多个),则需要增加votesum
的值。因此更新后的表应如下所示:
id|vote1|vote2|votesum
1|10 |10 |21
2|5 |15 |20
3|2 |2 |4
4|1 |1 |2
5|0 |2 |2
请记住,
votesum
的最高值是我需要更新的值。在上面的示例中,id=1
和id=2
不能相等,但是id=4
和id=5
可以相等,因为我不注意那些不是最高值的votesum
值。 最佳答案
以下查询使用变量来计算增量值:
select t.*,
@inc := if(@votesum = votesum, @inc + 1 , 0) as inc,
@votesum := votesum
from t cross join
(select @votesum := -1, @inc := 0) const
order by votesum desc, vote1 asc;
可以使用
update
在join
语句中使用:update t join
(select t.*,
@inc := if(@votesum = votesum, @inc + 1 , 0) as inc,
@votesum := votesum
from t cross join
(select @votesum := -1, @inc := 0) const
order by votesum desc, vote1 asc
) inc
on t.id = inc.id and inc.inc > 0
update t.votesum = t.votesum + inc.inc;
关于php - MySQL-如果两个加数相同,则增加总和值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18767212/