我有一个mySQL UPDATE
查询。
当我使用SELECT
并使用PHP在mySQL之外进行计算时,一切都运行良好,但是当我在mySQL中使用它时,它会产生一个奇怪的数字。
查询应该
Game.RankCube_1
)RankCube_Total
)这是我的疑问:
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
答案 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'