我正在制作一个系统,其中每个项目都分配有一个用户。当用户进入并看到分配给他的项目时,他必须输入一天结束时的工作时间。我向您展示了表之间的关系。
项目表
idp | titulo
------------------
02 | Proyecto DD1
资源表(用户)
id | nombre
-------------------
01 | Usuario A1
02 | Usuario B1
小时表
idh | idpro | idrecurso | horas | fecha
-------------------------------------
01 | 02 | 01 | 4 | 2019-08-20
02 | 02 | 02 | 10 | 2019-08-20
03 | 02 | 02 | 8 | 2019-08-21
04 | 02 | 01 | 6 | 2019-08-21
我做了两个INNER JOIN
来关联表格,如下所示:
<?php
$glist = $conn->query("SELECT * FROM proyectos INNER JOIN horaspro ON horaspro.idpro = proyectos.idp INNER JOIN recurso ON horaspro.idrecurso = recurso.id WHERE idp = '".$idp."' GROUP BY idrecurso");
?>
我得到的结果是:
Usuario A1 - 4 hs
Usuario B1 - 10 hs
Usuario B1 - 8 hs
Usuario A1 - 6 hs
当结果必须是:
Usuario A1 - 10 hs
Usuario B1 - 18 hs
我试图做的是在查询末尾添加一个,GROUP BY idrecurso
但它不会对重复的记录进行分组。无论用户如何,我也必须只取数字,并将它们相加以获得一般的总小时数,我尝试用 com 来做,SUM
但它对我也不起作用。我尝试使用我在网上找到的一些示例,但它们不起作用,一定是我也不太了解它们。千言万语,但我知识匮乏,却解决不了。
假设表
proyecto
yrecurso
有一个名为“id”的主键,这就是我执行 sql 语句的方式:这给了你结果:
对于您期望的结果(显示每个用户拥有的 hs 总数),您必须像 Damian Perez 所做的
group by
那样结合聚合函数执行 asum()
,尽管不必加入项目表。而对于idp = '".$idp."'
你使用的子句where
,就是说完整的将是:对于总小时数,您也使用
sum()
但不使用group by
它进行另一个查询,因为您不必horas
通过分组 by添加usuario
,但更简单的是,您必须为某个项目添加horas
表中的所有小时数,如下所示:horaspro