为什么我在SQL UPDATE查询中得到错误的值?

时间:2017-05-24 10:12:03

标签: mysql sql

我有一个mySQL UPDATE查询。

当我使用SELECT并使用PHP在mySQL之外进行计算时,一切都运行良好,但是当我在mySQL中使用它时,它会产生一个奇怪的数字。

查询应该

  1. 更新某个列的值(Game.RankCube_1
  2. 更新新的总平均排名列(RankCube_Total
  3. 这是我的疑问:

    UPDATE Images
    SET    Game.RankCube_1 = Game.RankCube_1 + 1,
           RankCube_Total = (
                              (
                                (
                                  7 * Game.RankCube_7 +
                                  6 * Game.RankCube_6 +
                                  5 * Game.RankCube_5 +
                                  4 * Game.RankCube_4 +
                                  3 * Game.RankCube_3 +
                                  2 * Game.RankCube_2 +
                                  1 * (Game.RankCube_1 + 1)
                                 ) / (
                                   Game.RankCube_7 +
                                   Game.RankCube_6 +
                                   Game.RankCube_5 +
                                   Game.RankCube_4 +
                                   Game.RankCube_3 +
                                   Game.RankCube_2 +
                                   Game.RankCube_1
                                 )
                               ) * 100 / 7
                             )
    WHERE  Game.Index = '2' AND Game.UserIndex = '1'
    

    总的平均值很奇怪,但它不是数学问题,因为在php中它正在工作,我只是想让代码更快地工作,所以我在查询中做了而不是做它在php里面。

    编辑:

    这些是某种情况的价值:

    RankCube_7  = 1
    RankCube_6  = 0
    RankCube_5  = 0
    RankCube_4  = 0
    RankCube_3  = 0
    RankCube_2  = 0
    RankCube_1  = 0
    

    此方案应导致100
    但我获得的RankCube_Total结果是200

    数学公式很简单:

    (
    7*amountOfLikesInCol7 + 
    6*amountOfLikesInCol6 + 
    5*amountOfLikesInCol5 + 
    4*amountOfLikesInCol4 + 
    3*amountOfLikesInCol3 + 
    2*amountOfLikesInCol2 + 
    1*amountOfLikesInCol1
    ) 
    / 
    (
    amountOfLikesInCol7+
    amountOfLikesInCol6+
    amountOfLikesInCol5+
    amountOfLikesInCol4+
    amountOfLikesInCol3+
    amountOfLikesInCol2+
    amountOfLikesInCol1
    )
    

    并且按%计算,我将它乘以100并将其除以7

    • 与亚马逊等网站中的五星公式具有相同的公式

2 个答案:

答案 0 :(得分:1)

mySQL UPDATE查询中的变量顺序很重要!

如果您在UPDATE查询字符串中多次使用相同的var,并且在查询开头更改它,则当处理器在查询中出现其下一个外观时,其值将不相同。

我的错误是我通过我的SQL字符串处理某个var,好像它通过它有相同的值。但它通过处理过程改变了它的价值!随着查询的进行。

首先我更新了这个var

Game.RankCube_1 = Game.RankCube_1 + 1

当SQL UPDATE命令在mySQL中运行时,它会一个接一个地更新变量。 因此,在更新var(+1)之后,第二个var:

RankCube_Total =...

假设将第一个var视为已经更新。 但我把它视为它仍然包含它在

之前的值
Game.RankCube_1 = Game.RankCube_1 + 1  

改变了它。

答案 1 :(得分:0)

我认为你在划分时错过了改变“Game.RankCube_1”的值,它仍然引用旧值

UPDATE Images SET Game.RankCube_1 = Game.RankCube_1+1, RankCube_Total = (((7*Game.RankCube_7  + 6*Game.RankCube_6  + 5*Game.RankCube_5  + 4*Game.RankCube_4  + 3*Game.RankCube_3  + 2*Game.RankCube_2  + 1*(Game.RankCube_1+1) ) / (Game.RankCube_7 + Game.RankCube_6 + Game.RankCube_5 + Game.RankCube_4 + Game.RankCube_3 + Game.RankCube_2 + Game.RankCube_1+1))*100/7) WHERE Game.Index = '2' AND Game.UserIndex = '1'