php - 如何对 MySQL 数据库中的一组结果求和并避免在 PHP 中重复?

标签 php mysql

我有一些用户可以为某些类(class)单独付款。 我有一个用户表、一个付款表、一个验证付款表 (pagosVerificados)、一个类(class)表以及用户已参加的类(class)。每门类(class)都包含一个类(class)价格字段。

我正在尝试执行一个数据库查询,以显示每个用户的所有付款。每笔付款都与特定类(class)相关联。

现在的问题是,如果我做了一个付款列表,而一些用户为一门类(class)支付了不止一次付款,那么该类(class)会在查询中重复出现。

那么我如何使用该查询来获取每门类(class)的总金额,然后从每笔付款中扣除?

数据库是这样配置的:

CREATE TABLE cursos (
    cursoID int unsigned not null auto_increment primary key,
    nombreCurso char(100) not null,
    cursoPrecio int(10) null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE cursosUsuarios (
    cursosUsuariosID int unsigned not null auto_increment primary key,
    userID int not null,
    cursoID int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE pagos (
    pagoID int unsigned not null auto_increment primary key,
    userID int not null,
    pagoMonto int null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE pagosVerificados (
    pagosVerificadosID int unsigned not null auto_increment primary key,
    userID int not null,
    pagoID int not null,
    cursoID int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是查询:

SELECT pagosVerificados.pagoID AS pagoid, pagos.pagoMonto,
                      cursosUsuarios.userID,
                      cursos.cursoID, cursos.nombreCurso, cursos.cursoPrecio
                      FROM pagos JOIN pagosVerificados
                      ON pagos.pagoID = pagosVerificados.pagoID
                      LEFT JOIN cursosUsuarios
                      ON pagosVerificados.cursoID = cursosUsuarios.cursoID
                      JOIN cursos
                      ON cursosUsuarios.cursoID = cursos.cursoID
                      WHERE cursosUsuarios.userID = 16

这是我得到的结果:

pagoID --- pagoMonto ---- userID -- cursoPrecio -- cursoID - nombreCurso
3 -------- 200 ---------- 16 ------ 5000 --------- 15 ------ alfa
11 ------- 25 ----------- 16 ------ 5000 --------- 15 ------ alfa
12 ------- 50 ----------- 16 ------ 8000 --------- 18 ------ zeta

现在,如果我想使用 PHP 来执行此操作:

Alfa
5000
-200
-25
======
4775

我该怎么做?

最佳答案

我不想撒谎,我不知道您的表名或列是什么意思,但这是我最好的猜测。在下面使用它作为子查询,然后连接到您的其他表以获取类(class)名称和类(class)总价。

select sum(A.pagoMonto), A.userID, B.cursoID
from pagos A inner join pagosVerificados B 
on ON A.pagoID = B.pagoID
Where B.userID = 16
GROUP BY B.cursoID,A.userID

关于php - 如何对 MySQL 数据库中的一组结果求和并避免在 PHP 中重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648850/

相关文章:

php - 伪造文件扩展名

php - 保存数据而不重新加载页面

php - 无法使用 PHP base64_encode 获取 Twitter 的 OAuth 签名

php - 在插入/更新每一行时导出 MySQL 表以将其标记为 "exported"或等效项

mysql - mysql中如何获取周末天数?

javascript - symfony 2.8 : error when assetic:dump

php - 在 php 标签中包含 javascript 变量

php - 使用 MySql 查询和 PHP 的不同结果

php - DISTINCT 函数不能与 $wpdb 一起在线工作

php - CodeIgniter:项目分页