在查询中求和值's,并在按项目ID过滤的表中显示


Sum value's in query and display this in table filtered by project ID

我一直在为学校做一个网站,但是我遇到了一个问题。我必须对不同表中的值求和,然后在首页上显示。

让我进一步解释:

首页

在这个截图中,你可以看到标题包含:计划和执行

  • Plan =您计划在项目上花费的总时间。
  • Do =你在整个项目上花费的时间。

这是我用来填充表的简单查询和代码:

<?php
$query = mysqli_query($conn, "SELECT * FROM `projecten`"); 
while ($row = mysqli_fetch_array($query)) {?>
    <tr class="active">
        <td style="display:none;" class="id"><?php echo $row['ID'];?></td>
        <td><?php echo $row['Naam'];?></td>
        <td><?php echo $row['Plan'];?></td>
        <td><?php echo $row['Do'];?></td>
        <td>
        <a class="btn btn-default btn-success" href="ExpandedProject.php?id=<?php echo $row['ID'];?>">Expand</a>
                <a class="btn btn-default btn-danger" href="Delete_Project.php?id=<?php echo $row['ID'];?>">Verwijderen</a>
        </td>
    </tr>
<?php  } ?>

现在我要做的是:

SQL = SELECT *, sum(tasks.Plan) FROM `projecten`,`tasks`

这工作,但因为我有1表的所有任务不同的项目,这将是添加任务,这不是项目的一部分。所以我又把这个删掉了。

我还尝试使用上述查询,然后添加一个在任务表中过滤项目id的地方。

我的问题是我如何使它,所以它将总和计划和做,并正确显示这些值,并被项目ID

过滤

只是想让你知道,当涉及到PHP,我有两个左手,所以我很抱歉,如果有一些错误在代码:)

我还想在我的表格上放更多的图片,但由于我的名声,我不能添加它们。

谢谢你的帮助!

你可以这样做:

SELECT    p.id, 
          p.naam, 
          coalesce(sum(t.plan),0) plan, 
          coalesce(sum(t.do),0) do 
FROM      projecten p 
LEFT JOIN tasks t 
       ON p.id = t.projectid 
GROUP BY  p.id, 
          p.naam

LEFT JOIN是一个外部连接,它将链接两个表中的记录,具有额外的特性,如果给定projecten记录没有找到相应的任务记录,则projecten记录仍将在结果中,但是null值通常是来自任务记录的列。

group by子句将聚合多个任务记录,因此每个项目记录仍然只得到一个记录。sum表达式告诉SQL引擎如何进行聚合。

包含coalesce功能以确保没有任何任务记录的项目记录不会显示计划执行null,而是0。如果您喜欢在这种情况下的空白,然后删除coalesce(..., 0),只留下sum(...)