【问题标题】:PHP calculate total cash based on money income and outcome SQLPHP根据货币收入和结果SQL计算总现金
【发布时间】:2020-06-28 21:07:58
【问题描述】:

我有一张这样的桌子

id | date | category | concept | amount

该类别有 2 个可能的选项:收入和结果

因此,例如,我的表格可能如下所示:

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>';



        }

        }

    }
}

提前致谢。

【问题讨论】:

    标签: php sql pdo group-by sum


    【解决方案1】:
    SELECT 
        SUM (CASE 
                 WHEN category='income' THEN amount
                 WHEN category='outocome' THEN -amount
        END) AS total_sales
    FROM table
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 应该是“as total_sales”吗?或直接使用 total_sales
      • @Cristian:这两种语法在大多数数据库中都可以。
      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多