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