如何使用php在名称分组的表中显示sql结果

时间:2014-03-08 13:20:14

标签: php html mysql sql database

我们获得了一个学校项目,我不知道如何去做。 所以我们要为企业建立一个数据库;我们是一家美容院。 我现在的问题是如何在表格中显示查询中的数据。

我看过以前的帖子似乎是一个答案,但我不知道它对我的案例是如何起作用的

stackoverflow question: group query results in php

所以我在这里有当前的结果和我想要它的样子的要点。基本上我希望员工姓名跨越多行,等于他们提供的服务数量。

enter image description here

这是我目前的代码:

<?php 
if (isset($_POST['submit']) && $error == '') { 
echo "<table width='auto' border='1' class='center'>
<tr>
<th scope='col'>Transaction No.</th>
<th scope='col'>Service Name</th>
<th scope='col'>Employee Name</th>
<th scope='col'>Date</th>
<th scope='col'>Adjusted Price </th>
<th scope='col'>Adjusted Cost </th>
<th scope='col'>Adjusted Parlor Dividend</th>
<th scope='col'>Adjusted Employee Dividend</th>
</tr>";
$res=mysqli_query($con, "SELECT serviceline.transnum, servicelist.srvnam, employeelist.empname, serviceline.transdate, serviceline.priceadj, serviceline.costadj, serviceline.pardivadj, servicelist.price, serviceline.empdivadj, servicelist.cost, servicelist.pardiv, servicelist.empdiv FROM EmployeeList INNER JOIN (ServiceList INNER JOIN ServiceLine ON ServiceList.SrvID = ServiceLine.SrvID) ON EmployeeList.EmpID = ServiceLine.EmpID WHERE DATE(serviceline.transdate) BETWEEN '".$fyear."-".$fmon."-01' AND '".$tyear."-".$tmon."-31'");
while($ent=mysqli_fetch_array($res))
 {
 $adjprc=$ent['priceadj']+$ent['price'];
 $adjcst=$ent['costadj']+$ent['cost'];
 $adjpardiv=$ent['pardivadj']+$ent['pardiv'];
 $adjempdiv=$ent['empdivadj']+$ent['empdiv'];
 echo "<tr>
<th scope='row' e>".$ent['transnum']."</th>
<td>".$ent['srvnam']."</td>
<td>".$ent['empname']."</td>
<td>".$ent['transdate']."</td>
<td>Php ".number_format($adjprc, 2, '.', '')."</td>
<td>Php ".number_format($adjcst, 2, '.', '')."</td>
<td>Php ".number_format($adjpardiv, 2, '.', '')."</td>
<td>Php ".number_format($adjempdiv, 2, '.', '')."</td>
 </tr>
 ";}
echo "</table>";
  }
  mysqli_close($con);
 ?>

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您想在一个表中执行此操作,就像当前代码一样,您需要将rowspan=xx添加到单元格中,这意味着您需要知道每个名称的行数,因此您必须添加使用COUNT()对您当前查询进行子查询。

或者,您可以使用嵌套表。所以你有一个主表,每行有两个单元格,一个用于名称,另一个用于所有其他字段的嵌套表格。类似的东西:

$last_emp="";
while($ent=mysqli_fetch_array($res))
{
 $adjprc=$ent['priceadj']+$ent['price'];
 $adjcst=$ent['costadj']+$ent['cost'];
 $adjpardiv=$ent['pardivadj']+$ent['pardiv'];
 $adjempdiv=$ent['empdivadj']+$ent['empdiv'];

 if($last_emp != $ent['empname'])
 {
   if($last_emp != "")
   {
     echo "</table><td/></tr>";
   }
   echo "<tr>
   <td>".$ent['empname']."</td>
   <td><table>";
 }
 echo "<tr>";
 <td>".$ent['transdate']."</td>
 <td>Php ".number_format($adjprc, 2, '.', '')."</td>
 <td>Php ".number_format($adjcst, 2, '.', '')."</td>
 <td>Php ".number_format($adjpardiv, 2, '.', '')."</td>
 <td>Php ".number_format($adjempdiv, 2, '.', '')."</td>
 </tr>
 if($last_emp != $ent['empname'])
 {
   $last_emp = $ent['empname'];
 }
}