PHP - 循环访问SQL结果集。当条件遇到重复时

时间:2013-03-06 16:54:57

标签: php loops while-loop html-table

对PHP来说很新,所以这就是问题所在。我有一个SQL结果集,具有以下结构:

ItemID Desc
0      A
1      B
2      C
0      D
3      E
0      F
4      G
5      H

对于每个ItemID = 0,我想创建一个表。然后对于ItemID = 0下的每个ItemID,我想在新表中创建一行,直到我点击下一个ItemID = 0.重复直到结束。

期望的结果:

<table>
    <tr>
        <td>A</td>
    </tr>
</table>
<table>
    <tr>
        <td>B</td>
    </tr>
    <tr>
        <td>C</td>
    </tr>
</table>
<table>
    <tr>
        <td>D</td>
    </tr>
</table>
<table>
    <tr>
        <td>E</td>
    </tr>
</table>
<table>
    <tr>
        <td>F</td>
    </tr>
</table>
<table>
    <tr>
        <td>G</td>
    </tr>
    <tr>
        <td>H</td>
    </tr>
</table>

我可以在ItemID = 0时打印每个表,但是怀疑它是正确的方法。这是我到目前为止的PHP代码:

$legendSql="select ItemID, Desc from ...";
$getLegend=sqlsrv_query($conn, $legendSql);
while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) ) {
    if ($row['ItemID'] === '.00') { // when ItemID = 0 create table
        print '<table>';
        print '<tr>';
        print '<td>';
        print $row['Desc'];
        print '</td>';
        print '</tr>';
        print '</table>';
    }
//    foreach( )?????
   }

2 个答案:

答案 0 :(得分:1)

这样的事情:

$first=1;

while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) )
  {

    if ($row['ItemID'] === '.00') // when ItemID = 0 create table
    {
      if ($first==0)
      {
        print '</table>';
      }
      print '<table>';
      print '<tr>';
      print '<td>';
      print $row['Desc'];
      print '</td>';
      print '</tr>';
      print '</table>';
      $first=1;
    }
    else
    {
      if ($first==1)
      {
        print '<table>';
        $first=0
      }
      print '<tr>';
      print '<td>';
      print $row['Desc'];
      print '</td>';
      print '</tr>';
    }
}
if ($first==0)
{
  print '</table>';
}

答案 1 :(得分:0)

只需稍微更改您的if声明:

if ($row['ItemID'] === '.00') { // when ItemID = 0 create table
    print '<table>';
}
print '<tr>';
print '<td>';
print $row['Desc'];
print '</td>';
print '</tr>';

while循环之外,把它放在:

print '</table>';

整个循环结构变为:

while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) ) {
    if ($row['ItemID'] === '.00') {
        print '<table>';
    }
    print '<tr>';
    print '<td>';
    print $row['Desc'];
    print '</td>';
    print '</tr>';
}
print '</table>';