作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在简单的 MySQL 更新语法上苦苦挣扎了几个小时。 表的votesum
列是vote1
+vote2
列的总和。如果有多个 votesum
值彼此相等(20 和 20,如下面的示例),我需要将 votesum
增加1 表示具有较高 vote1
值的行。
表格:
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
code> 可以相等,因为我不注意那些不是最高值的 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/
我是一名优秀的程序员,十分优秀!