mysql:将数学运算存储为新数据库

时间:2016-03-26 02:28:50

标签: php mysql

我有表,从这个表中,我想做一些数学运算(例如sum)然后我想将结果保存在表中的一个单独的列中。

所以这是我的表

table: xxx

!  code   !   A  !   B  !   C  !
---------------------------------
!  0001   !   4  !   2  !      !
!  0002   !   2  !   1  !      !
!  0003   !   1  !   4  !      !
!  0004   !   3  !   5  !      !

然后我使用此代码调用查询,并保存数学运算。

$mySql = "SELECT *  FROM xxx ORDER BY code ASC "; 
$myQry = mysql_query($mySql, $koneksidb)  or die ("Query salah : ".mysql_error());
while ($myData = mysql_fetch_array($myQry))

$sum = $myData['A'] +  $myData['A']

$mySql  = "UPDATE xxx  SET C='$sum' WHERE code='$Kode'";
$myQry  = mysql_query($mySql, $koneksidb) or die ("Gagal query".mysql_error());
while ($myData = mysql_fetch_array($myQry))
{
    $Kode = $myData['code'];
}

我的问题是,它不像我想要的那样出现。 我想这样:

table: xxx

!  code   !   A  !   B  !    C  !
---------------------------------
!  0001   !   4  !   2  !    6  !
!  0002   !   2  !   1  !    3  !
!  0003   !   1  !   4  !    5  !
!  0004   !   3  !   5  !    8  !

但这就是我所拥有的

table: xxx

!  code   !   A  !   B  !    C  !
---------------------------------
!  0001   !   4  !   2  !    6  !
!  0002   !   2  !   1  !    6  !
!  0003   !   1  !   4  !    6  !
!  0004   !   3  !   5  !    6  !

任何帮助?我想,我的代码只是从第一个代码中获取数据,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这里有几个问题,这项任务可以更轻松地完成。然而,因为这听起来像你正在尝试的东西,并希望学习让我们专注于你的代码。

直接问题是代码的结构。您执行数学运算,但结构不会按预期存储结果。你必须将结构更改为:

$selectQuery = "SELECT * FROM xxx ORDER BY code ASC"; 
$selectResult = mysql_query($selectQuery, $koneksidb) or die ("Query salah: ".mysql_error());
while ($myData = mysql_fetch_array($selectResult)) {
    $sum = $myData['A'] +  $myData['B'];
    $code = $myData['code'];
    $updateQuery = "UPDATE xxx SET C='$sum' WHERE code='$code'";
    mysql_query($updateQuery, $koneksidb) or die ("Gagal query: ".mysql_error());
}

尤其不是while命令使用的花括号:while (...) { ... }

一般警告:您在此处使用旧的,过时的和已弃用的mysql扩展程序。您应该查看当前的替代mysqliPDO,并了解代码的“预处理语句”和“参数绑定”的优点,这样您就不会遇到典型问题“sql注入漏洞”。

如开头所述,通过不在php中执行数学计算,而是直接在mysql中执行,可以简化整个任务。这样,您只需要一个sql update语句来完成所有工作:UPDATE xxx SET C=A+B;。但正如前面提到的那样,你的问题似乎正在尝试进入这个领域,所以在继续之前首先让你自己的代码工作可能是一个非常好的主意。

答案 1 :(得分:1)

这可能是您尝试做的事情

UDPATE xxx SET C = A + B

答案 2 :(得分:1)

首先, 不要使用 已弃用的 mysql_* API!

其次,你非常复杂。如果您想要做的只是添加A + B并将结果存储在每行的C 中,您可以在单个SQL查询中执行此操作,如Tin Tran建议的那样。

完整的代码将是

$query = "UPDATE xxx SET c = a + b";
mysql_query($query, $koneksidb) or die("Gagal query".mysql_error());

(这两行会替换问题中显示的所有代码。)

尽管如我所说,您应该立即迁移到mysqliPDO