如何在MySQL中存储TOTAL的结果,以便可以立即将其插回到表中

时间:2017-09-26 10:42:58

标签: php mysql

我想将数据输入表格。使用刚刚输入的数据,我想将3列的值相加,然后将该数字插入表中第4列。

我的初始代码:

<?php

$post = file_get_contents('php://input');

$updatedJSONdata = json_decode($post, true);

$numOfStarsLevelOne = $updatedJSONdata["numOfStarsLevelOne"];
$numOfStarsLevelTwo = $updatedJSONdata["numOfStarsLevelTwo"];
$numOfStarsLevelThree = $updatedJSONdata["numOfStarsLevelThree"];


$db = new PDO('mysql:host=localhost;dbname=gametable', 'root', '');
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

$sql = "INSERT INTO gameData(  
                        numOfStarsLevelOne, 
                        numOfStarsLevelTwo, 
                        numOfStarsLevelThree) 
                        VALUES (
                        '$numOfStarsLevelOne',
                        '$numOfStarsLevelTwo',
                        '$numOfStarsLevelThree')";

$testInsert = $db->prepare($sql);
$testInsert->execute();

我的猜测是我需要进行第二次查询,例如

$sqlTwo = "SELECT (numOfStarsLevelOne
+ numOfStarsLevelTwo
+ numOfStarsLevelThree) as total from gameData";

$secondInsert = $db->prepare($sqlTwo);
$secondInsert->execute();

但我不确定如何存储第二个查询的结果,以便可以将其插回到gameData中。

我希望最终能够进行其他查询,例如

$sqlThree = "INSERT into gamedata(totalNumOfStars) values("result of second query stored as a variable")";

2 个答案:

答案 0 :(得分:0)

&#39;我认为这就是你要找的东西:

$total1 = $numOfStarsLevelOne + $numOfStarsLevelTwo + $numOfStarsLevelThree;

$sql = "INSERT INTO gameData(  
                    numOfStarsLevelOne, 
                    numOfStarsLevelTwo, 
                    numOfStarsLevelThree,
                    totalNumOfStars) 
                    VALUES (
                    '$numOfStarsLevelOne',
                    '$numOfStarsLevelTwo',
                    '$numOfStarsLevelThree',
                    '$total1')";

答案 1 :(得分:0)

你考虑过这个吗?

INSERT INTO gameData(numOfStarsLevelOne, numOfStarsLevelTwo,  numOfStarsLevelThree) 
    VALUES ($numOfStarsLevelOne, $numOfStarsLevelTwo, $numOfStarsLevelThree,
            $numOfStarsLevelOne + $numOfStarsLevelTwo + $numOfStarsLevelThree
           );

注意:我删除了单引号,因为这些可能是数字。但是,您应该使用参数,而不是查询字符串。

如果您希望值始终是最新的,请使用触发器。或者,创建一个视图:

create view v_gamedata as
    select gd.*,
           (numOfStarsLevelOne + $numOfStarsLevelTwo + $numOfStarsLevelThree) as total
    from gamedata;

或者,在最新版本的MySQL中,您可以创建一个计算列。