我一直在上学的网站,但我遇到了一个问题。我必须对不同表格中的值进行求和,然后在首页上显示。
让我进一步解释一下:
在此屏幕截图中,您会看到包含以下内容的标题:计划和执行
这是我用来填充表格的简单查询和代码:
<?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上有两个左手,所以如果代码中有错误我很抱歉:)
我还想要提供更多我所拥有的桌子的图片,但由于我的声誉,我无法添加它们。
感谢您的帮助!
答案 0 :(得分:0)
你可以这样做:
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 记录仍然在结果中,但通常是任务记录中的列的null
值。
group by
子句将聚合多个任务记录,因此每个 projecten 记录只能获得一条记录。 sum
表达式告诉SQL引擎如何进行聚合。
包含coalesce
功能是为了确保 projecten 记录没有任何任务记录,不会显示{em> {em>计划和执行,而不是0。如果您喜欢这种情况下的空白,请删除null
,只留下coalesce(..., 0)
。