MySql和PHP-在while循环中获取下一行


MySql and PHP - Fetch next row in a while loop

我有一个MySQL查询,它从数据库中选择扫描详细信息。这些细节被放在一份报告中。它被要求在一个页面上以两列(几乎两个表)显示报告,以保留所需的空间。

我目前正在做的是显示表格标题:

 $report .= ">
                    <table cellspacing='0' class='at_report'>
                        <thead>
                            <tr><th colspan='8'>Area ".$row['area_name']."</th></tr>
                        </thead>
                        <tr>
                            <td class='simple_header' style='width:7%;'><div class='nosplit'>No.</div></td>
                            <td class='simple_header' style='width:8%;'><div class='nosplit'>Barcode</div></td>
                            <td class='simple_header' style='width:40%;'><div class='nosplit'>Product</div></td>
                            <td class='simple_header' style='width:5%;'><div class='nosplit'>Qty</div></td>
                            <td class='simple_header' style='width:7%;'><div class='nosplit'>Cost Value</div></td>
                            <td class='simple_header' style='width:16%;'><div class='nosplit'>Created By</div></td>
                            <td class='simple_header' style='width:10%;'><div class='nosplit'>Time</div></td>
                            <td class='simple_header' style='width:7%;'><div class='nosplit'>No.</div></td>
                            <td class='simple_header' style='width:8%;'><div class='nosplit'>Barcode</div></td>
                            <td class='simple_header' style='width:40%;'><div class='nosplit'>Product</div></td>
                            <td class='simple_header' style='width:5%;'><div class='nosplit'>Qty</div></td>
                            <td class='simple_header' style='width:7%;'><div class='nosplit'>Cost Value</div></td>
                            <td class='simple_header' style='width:16%;'><div class='nosplit'>Created By</div></td>
                            <td class='simple_header' style='width:10%;'><div class='nosplit'>Time</div></td>
                        </tr>
                         ";

然后我从数据库中获取结果:

 while ($srow = $scan_res->fetch(PDO::FETCH_ASSOC))

然后我在表中显示结果:

 $report .= "<tr ".$row_style.">
                                <td><div class='nosplit'>".$n."</div></td>
                                <td><div class='nosplit'>".$srow['barcode']."</div></td>
                                <td><div class='nosplit'>".$product_nd_short."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$rounded_qty."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$cur_symbol.$cn.$mcost_estimated."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".((strlen($srow['stocktake_staff_name'])>16)? substr($srow['stocktake_staff_name'], 0, 16)."..." : $srow['stocktake_staff_name'])."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$dt->format('H:i:s')."</div></td></tr>";

我的问题是,如何转到while循环中的下一组结果,以便在表中添加另一列和一组结果?我试过这个:

$report .= "<tr ".$row_style.">
                                <td><div class='nosplit'>".$n."</div></td>
                                <td><div class='nosplit'>".$srow['barcode']."</div></td>
                                <td><div class='nosplit'>".$product_nd_short."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$rounded_qty."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$cur_symbol.$cn.$mcost_estimated."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".((strlen($srow['stocktake_staff_name'])>16)? substr($srow['stocktake_staff_name'], 0, 16)."..." : $srow['stocktake_staff_name'])."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$dt->format('H:i:s')."</div></td>";       
                $row_counter++;     
                $n++;
                   $report .= "
                                <td><div class='nosplit'>".$n."</div> </td>
                                <td><div class='nosplit'>".$srow['barcode']."</div></td>
                                <td><div class='nosplit'>".$product_nd_short."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$rounded_qty."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$cur_symbol.$cn.$mcost_estimated."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".((strlen($srow['stocktake_staff_name'])>16)? substr($srow['stocktake_staff_name'], 0, 16)."..." : $srow['stocktake_staff_name'])."</div></td>
                                <td style='text-align:center;'><div class='nosplit'>".$dt->format('H:i:s')."</div></td> 
                            </tr>";

但它所做的只是复制第一组的结果。

谢谢!

您可能需要这样的东西。

您希望将2个结果放在同一行中。

$n = 1;
while($srow = $scan_res->fetch(PDO::FETCH_ASSOC)){
    if($n % 2 != 0)
        $report .= "<tr ".$row_style.">";
    $report .= "<td><div class='nosplit'>".$n."</div></td>
              <td><div class='nosplit'>".$srow['barcode']."</div></td>
              <td><div class='nosplit'>".$product_nd_short."</div></td>
              <td style='text-align:center;'><div class='nosplit'>".$rounded_qty."</div></td>
              <td style='text-align:center;'><div class='nosplit'>".$cur_symbol.$cn.$mcost_estimated."</div></td>
              <td style='text-align:center;'><div class='nosplit'>".((strlen($srow['stocktake_staff_name'])>16)? substr($srow['stocktake_staff_name'], 0, 16)."..." : $srow['stocktake_staff_name'])."</div></td>
              <td style='text-align:center;'><div class='nosplit'>".$dt->format('H:i:s')."</div></td>";
    if($n % 2 == 0)
        $report .= "</tr>";
    $n++;
}

Ehm,

你的问题有点令人困惑,但我想我知道你的意思。。。。

while ($srow = $scan_res->fetch(PDO::FETCH_ASSOC))
{
    $n++;
    $report .= "<tr><td><div class='nosplit'>".$n."</div></td>
                <td><div class='nosplit'>".$srow['barcode']."</div></td>
                <td><div class='nosplit'>".$product_nd_short."</div></td>
                <td style='text-align:center;'><div class='nosplit'>".$rounded_qty."</div></td>
                <td style='text-align:center;'><div class='nosplit'>".$cur_symbol.$cn.$mcost_estimated."</div></td>
                <td style='text-align:center;'><div class='nosplit'>".((strlen($srow['stocktake_staff_name'])>16)? substr($srow['stocktake_staff_name'], 0, 16)."..." : $srow['stocktake_staff_name'])."</div></td>
                <td style='text-align:center;'><div class='nosplit'>".$dt->format('H:i:s')."</div></td></tr>";
}

我还没试过运行它。。。但它应该做你想做的事。

  • 确保while语句后面的大括号{}中有要重复的语句
  • 确保以开始一行,以结束一行
  • 您只使用数据行中的barcode和stockstaffname变量。。。你似乎已经预先设定的其他值。。。所以它们总是一样的($rounded_qty,$dt,$product_nd_short……所以如果你想让它来自你的行……那么在while语句中从你的行中读取它们