PHP рассчитать общую сумму sh на основе денежных доходов и результатов SQL - PullRequest
0 голосов
/ 17 марта 2020

У меня есть такая таблица

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

Исходя из этой таблицы, мне нужно сделать следующий счет: суммировать все элементы категории, когда категория является доходом, и вычесть, когда категория является результатом, чтобы получить в общей сложности около sh.

В основном 200 + 100 + 500-600 = 200

Я хочу показать этот результат в заголовке моего поста, вот скриншот, чтобы дать идею:

image">

Как мне сделать SQL консультацию в моем PHP коде? Я использую 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>';



        }

        }

    }
}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Вы можете выполнить вычисления непосредственно в SQL с условной суммой:

select sum(case when category = 'income' then amount else -amount end) total_sales
from mytable
0 голосов
/ 18 марта 2020
SELECT 
    SUM (CASE 
             WHEN category='income' THEN amount
             WHEN category='outocome' THEN -amount
    END) AS total_sales
FROM table
...