循环 - 从循环结果中分离标题 - 循环然后标题为每组结果

时间:2014-11-20 17:13:33

标签: php mysql

我有一个while循环,它将所有链接的数字分成表格中的不同部分。以下是声明:

$result2 = mysqli_query($con,"SELECT a.*, b.*, c.* FROM b_statement_main a 
INNER JOIN b_crm_company b ON a.COMPANY_ID = b.ID INNER JOIN b_statement c 
ON a.LINK = c.LINK 
WHERE a.COMPANY_ID = '$companyID2' AND a.COMMENCE BETWEEN '$from2' AND '$to2' ");

$linked = -1;
while($row = mysqli_fetch_array($result2))
{

    $companyName = $row['TITLE'];
    $arDates = strtotime($row['COMMENCE']);
    $remaining = $row['REMAINING_HOURS'];
    $linking = $row['LINK'];
    $arNumber = $row['REF_NUMBER'];
    $billable = $row['BILLABLE'];


    if($linked != $row['LINK'])
    {
    print "<tr><td><strong>$companyName</strong></td><td></td><td><strong>".date('d/m/Y',$arDates)."</strong></td><td></td><td></td><td><strong>$remaining</strong></td></tr>";

    $linked = $row['LINK'];
    }

    print "<tr><td></td><td></td><td></td><td>$arNumber</td><td>$billable</td><td></td></tr>";

}

print "</table>";

所以返回的是每个部分的标题,然后它循环与下面的查询相关的结果。一旦它返回了所有相应的结果,它将再次显示标题部分并再次循环相关结果。它会重复此操作,直到显示完所有内容。

然而,我想要的是标题部分低于循环结果。因此,它将循环结果,然后一旦它为特定部分循环它们,将标题放在下面。然后它将进入并再次循环结果并将标题放在下面,它将一直持续到完成。

任何人都知道我该怎么做。显然,如果我在if之前移动打印,那么它会输出结果,标题,结果,标题等。

所以这就是目前的样子(不准确,只是为了显示标题和结果):

| Company  | Date        | Hours |
| Title 1  | 20/11/2014  |       |
| Result 1 | 10/11/2014  | 44    |
| Result 2 | 08/11/2014  | 22    |

当我需要它时:

| Company  | Date        | Hours |
| Result 1 | 10/11/2014  | 44    |
| Result 2 | 08/11/2014  | 22    |
| Title 1  | 20/11/2014  |       |

1 个答案:

答案 0 :(得分:0)

如何根据表中所需的条目创建新数组。所以你的代码会像(注意$outputarray已添加):

编辑:假设每个数据集只有一个标题。如果每个记录集需要多个标题,则需要在记录中设置标识集的内容。在这种情况下,最简单的方法是根据标题是否为(根据您的标准)制作结果的多维数组。

$linked = -1;
while($row = mysqli_fetch_array($result2)){    
    $companyName = $row['TITLE'];
    $arDates = strtotime($row['COMMENCE']);
    $remaining = $row['REMAINING_HOURS'];
    $linking = $row['LINK'];
    $arNumber = $row['REF_NUMBER'];
    $billable = $row['BILLABLE'];

    if($linked != $row['LINK']){
       $outputarray['title'][] ="<tr><td><strong>$companyName</strong></td>
          <td></td><td><strong>".date('d/m/Y',$arDates)."</strong></td><td></td><td>
          </td><td><strong>$remaining</strong></td></tr>";
       $linked = $row['LINK'];
    } else {
       $outputarray['row'][]= "<tr><td></td><td></td><td></td><td>$arNumber</td>
          <td>$billable</td><td></td></tr>";
    }
  }
   print"<table>
         <thead>"; // etc... have the titles go here.
   foreach($outputarray as $key=> $value){
        if($key=='title'){
          $thistitle=$value;
        } else {
          print $value;
        }
   }
   print $thistitle;

   print "</table>";