2016-09-17 46 views
0

我一直在为学校的网站工作,但我遇到了问题。我必须总结不同表格中的值,然后在头版上显示什么。总和在查询中的值,并按照项目ID过滤显示此表

让我进一步解释:

Front page

在这个截图,可以看到其中包含了头:计划和执行

  • 计划 =的时间,你打算支付的金额在项目上。
  • 执行 =您花在整个项目上的时间。

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

<?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

只想让你知道,我有2个左手,当谈到被过滤到PHP,所以我很抱歉,如果在代码中有一些错误:)

我也想放更多的图片我有,但我不能添加他们,因为我的声誉。

感谢您的帮助!

+0

'sum()'是一个好的开始,'group by'是下一步。 – Blake

+0

查找SQL'JOIN'语法应该可能是您的第一步 – RiggsFolly

+1

Robert;在解决sql问题时,我认为你会发现从SQL代码中分离SQL问题更容易(并且更容易获得帮助)。用示例数据向我们展示您的源表格(模式),给出一个示例(以表格形式)您希望看到的结果,并且我保证有人会以惊人的速度为您提供答案。 – SteveJ

回答

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是一个外连接给将从两个链接表的记录,具有额外的功能,如果没有相应的任务找到记录项目记录,项目记录将仍然在结果中,但null值通常是来自任务记录的列。

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

包含在​​3210功能,以确保一个projecten记录而无任何任务记录,不会显示null计划,而不是0。如果您更喜欢这种情况下的空白,请删除coalesce(..., 0),只剩下sum(...)