通过查询循环到单独的表中

时间:2014-01-26 21:03:03

标签: php mysql mysqli

我打电话给我的查询

    $sql = "Call new_c02(1,1,'2014-01-10','2014-01-10')";
    if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
    }

并生成一个表格:

Acc  Data1  Data2  Data3    
1    x     y     z
1    a     b    c
2    x     y    z
2    a     b    c

我可以使用

将它扔进一张桌子
<table> <?php while($row = $result->fetch_assoc()){ ?>                  
<tr>
  <td>
  <?php    echo $row['accounts'] . '<br />'; ?>
  </td>
</tr>
</table>

等等

但是我希望能够为每个不同的帐户生成一个单独的表,因此我有一个Acc 1表和一个单独的表用于Acc2,依此类推,直到我在查询中用尽了Accs。 只是不确定如何遍历查询以为每个

创建一个单独的表

帮助真的很感激 西蒙

1 个答案:

答案 0 :(得分:1)

您需要跟踪已经输出的Acc编号,如果尚未输出当前的编号,请创建一个新表格。这样的事情可以解决问题:

<?php
$acc_output = array();
$is_first = true;
while($row = $result->fetch_assoc()) {

    // set this according to your array structure            
    $acc_id = $row['accounts']['Acc']; 

    // if this is the first row, open a table
    if($is_first)
        echo '<table>';

    // if it's not the first row, and it is a new acc ID
    // close current table and open a new table
    if(!$is_first && !in_array($acc_id))
        echo '</table>' . PHP_EOL . '<table>';

    // add current acc_id to the array
    $acc_output[] = $acc_id;
    // set not first
    $is_first = false;

    ?>
    <tr>
      <td>
      <?php    echo $row['accounts'] . '<br />'; ?>
      </td>
    </tr>

    <?php

}

// then, close the last table
?>
</table>

在测试用例中使用示例数据:

Acc  Data1  Data2  Data3    
1    x     y    z       - is_first, open new table
1    a     b    c       - not first, is in array - do nothing        
2    x     y    z       - not first, not in array - close/open new table
2    a     b    c       - not first, is in array - do nothing
- end, close table