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

标签 mysql sql

我有一个 mySQL UPDATE 查询。

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

查询应该是

  1. 更新特定列的值 (Game.RankCube_1)
  2. 更新新的总平均排名列 (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/

相关文章:

php - 将xml上传到mysql php - 在表中插入无值

mysql - Cakephp 3 删除关联数据过滤

SQL 更改最小值和最大值的数据格式

sql - 关于嵌套/递归元素的 Postgres JSONB 查询

mysql - 每天的sql查询

MySql 函数没有给出正确的结果

Mysql在两列中使用相同的表行

使用 ODBC 与 MS SQL Server 的 PHP PDO 连接

java - 如何使用java从sql server获取主键约束名称

sql - 为每个BST节点构建遍历路径