Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP根据货币收入和结果SQL计算现金总额_Php_Sql_Pdo_Group By_Sum - Fatal编程技术网

PHP根据货币收入和结果SQL计算现金总额

PHP根据货币收入和结果SQL计算现金总额,php,sql,pdo,group-by,sum,Php,Sql,Pdo,Group By,Sum,我有一张这样的桌子 id | date | category | concept | amount 该类别有两种可能的选择:收入和结果 例如,我的表格可以是这样的: id | date | category | concept | amount ---------------------------------------------------- 1 | 2020-01-20 | income | tv sale | 200 2 | 2020-

我有一张这样的桌子

id | date | category | concept | amount
该类别有两种可能的选择:收入和结果

例如,我的表格可以是这样的:

id | date       | category | concept        | amount
----------------------------------------------------
1  | 2020-01-20 | income   | tv sale        | 200
2  | 2020-01-20 | income   | radio sale     | 100
3  | 2020-01-20 | income   | pc sale        | 500
4  | 2020-01-25 | outcome  | salary payment | 600
根据这张表,我需要做如下说明:当类别是收入时,将所有类别项目相加,当类别是结果时,将其减去,得到现金总额

基本上200+100+500-600=200

我想在我的pos的标题中显示该结果,下面是一个屏幕截图,给出一个想法:

“>

我应该如何在PHP代码中进行SQL查询?我正在使用PDO,下面是模型代码:

static public function mdlIngresarMovimiento($tabla, $datos){

    $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla(fecha, categoria_cd, concepto, observacion_cd, monto) VALUES (:fecha, :categoria_cd, :concepto, :observacion_cd, :monto)");

    $stmt->bindParam(":fecha", $datos["fecha"], PDO::PARAM_STR);
    $stmt->bindParam(":categoria_cd", $datos["categoria_cd"], PDO::PARAM_STR);
    $stmt->bindParam(":concepto", $datos["concepto"], PDO::PARAM_STR);
    $stmt->bindParam(":observacion_cd", $datos["observacion_cd"], PDO::PARAM_STR);
    $stmt->bindParam(":monto", $datos["monto"], PDO::PARAM_INT);

    if($stmt->execute()){

        return "ok";

    }else{

        return "error";

    }

    $stmt->close();
    $stmt = null;

}
这是我的控制器:

static public function ctrCrearMovimiento(){

    if(isset($_POST["fechaMovimiento"])){

        if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["categoriaMovimiento"]) &&
           preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["entradaConcepto"]) &&
           preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["observacionMovimiento"])){

            $tabla = "caja_diaria";

            $datos = array("id"=>$_POST["idMovimiento"],
                           "fecha"=>$_POST["fechaMovimiento"],                  
                           "categoria_cd"=>$_POST["categoriaMovimiento"],
                           "concepto"=>$_POST["entradaConcepto"],
                           "observacion_cd"=>$_POST["observacionMovimiento"],
                           "monto"=>$_POST["montoMovimiento"]);

            $respuesta = ModeloCajaDiaria::mdlIngresarMovimiento($tabla, $datos);

            if($respuesta == "ok"){

                echo'<script>

                swal({
                      type: "success",
                      title: "El movimiento ha sido guardado correctamente",
                      showConfirmButton: true,
                      confirmButtonText: "Cerrar"
                      }).then(function(result){
                                if (result.value) {

                                window.location = "caja-diaria";

                                }
                            })

                </script>';

            }else{

            echo'<script>

                swal({
                      type: "error",
                      title: "¡El movimiento no puede ir vacío!",
                      showConfirmButton: true,
                      confirmButtonText: "Cerrar"
                      }).then(function(result){
                        if (result.value) {

                        window.location = "caja-diaria";

                        }
                    })

            </script>';



        }

        }

    }
}
静态公共函数ctrcrearmoviento(){
如果(isset($_POST[“fechaMovimiento”])){
如果(预匹配('/^[a-zA-Z0-9ñññáíóúÁÍÓÚ]+$/',$后[“分类维米蒂诺”])&&
预匹配('/^[a-zA-Z0-9ññáúúúúúúúúúúúúÚ]+$/,$后[“entradaConcepto”])&&
赛前比赛('/^[a-zA-Z0-9ññáúúúúúúúúúúúúÚ]+$/',赛后[“观测移动”]){
$tabla=“caja_diaria”;
$datos=array(“id”=>$\u POST[“idmoviminto”],
“fecha”=>$\u POST[“fechaMovimiento”],
“categoria_cd”=>$\u POST[“categoriaMovimiento”],
“concepto”=>$\u POST[“entradaConcepto”],
“observacion_cd”=>$\u POST[“observacionMovimiento”],
“蒙托”=>$_POST[“蒙托莫维门托”];
$respuesta=ModeloCajaDiaria::mdlIngresarMovimiento($tabla,$datos);
如果($respuesta==“确定”){
回声'
游泳({
键入:“成功”,
标题:“西多-瓜尔达多矫正运动”,
showConfirmButton:没错,
confirmButtonText:“Cerrar”
}).然后(函数(结果){
if(result.value){
window.location=“caja diaria”;
}
})
';
}否则{
回声'
游泳({
键入:“错误”,
标题:“《无障碍运动》”,
showConfirmButton:没错,
confirmButtonText:“Cerrar”
}).然后(函数(结果){
if(result.value){
window.location=“caja diaria”;
}
})
';
}
}
}
}

提前感谢。

您可以直接在SQL中使用条件和进行计算:

select sum(case when category = 'income' then amount else -amount end) total_sales
from mytable

它应该是“总销售额”还是“总销售额”directly@Cristian:在大多数数据库中,两个语法都正常。
SELECT 
    SUM (CASE 
             WHEN category='income' THEN amount
             WHEN category='outocome' THEN -amount
    END) AS total_sales
FROM table