在简单的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=1id=2不能相等,但是id=4id=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;


可以使用updatejoin语句中使用:

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/

10-09 15:24