我有一个 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
- 这与亚马逊等网站上的五星级公式相同
最佳答案
mySQL UPDATE 查询中变量的顺序很重要!
如果您在 UPDATE 查询字符串中多次使用相同的变量,并且在查询开始时更改它,则当处理器下次出现在查询中时,它的值将不会相同。
我的错误是我通过 SQL 字符串处理某个 var,就好像它具有相同的值一样。但它通过加工过程改变了它的值(value)!随着查询的进行。
首先我更新了这个变量
Game.RankCube_1 = Game.RankCube_1 + 1
当 SQL UPDATE 命令在 mySQL 中运行时,它会一个接一个地更新变量。 所以,在这个变量更新(+1)之后,第二个变量:
RankCube_Total =...
应该将第一个变量视为已更新。 但我将它视为仍然包含它之前的值
Game.RankCube_1 = Game.RankCube_1 + 1
改变了。
关于mysql - 为什么我在 SQL UPDATE 查询中得到错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155376/