在PHP和MySql中多次打印记录

时间:2012-11-13 15:19:14

标签: php javascript html mysql

我正在尝试创建一个简单查询表格并将表格显示到页面的网页,但是有一个复杂的转折让我感到困惑。以下是用逗号分隔的表中的列名和一个示例记录:

R_ID ,  B_ID ,  R_No ,  RoomName , showers , eyewashPlumbed , EyewashBottles  
1 , 609 ,   609 ,   Hazardous Waste Shed ,  1   ,   1    ,  1

我需要打印此表的每一行,但如果showers,eyewashPlumbed或EyewashBottles大于0,还要打印多行。例如,我将打印此行三次。如果淋浴为0,我只打印两次(一次用于eyewashPlumbed,一次用于EyewashBottles,0用于淋浴)。如果淋浴是2,我会打印4次,等等。

我用来打印的代码如下:

<?php while ($row = mysql_fetch_array($result, MYSQL_ASSOC)): ?> 
    <tr>
    <td><?php print $row["B_ID"];?></td> 
    <td><?php print $row["R_No"];?></td> 
    <td><?php print $row["RoomName"];?></td>
    <td><?php print $row["Showers"];?></td>
    <td><?php print $row["eyewashPlumbed"];?></td>
    <td><?php print $row["EyewashBottles"];?></td>  
    </tr>
<?php endwhile; ?>

问题是我不知道如何中断while循环以便多次打印同一行。当它从mysql_fetch_array中拉出时,它会进入下一行。

2 个答案:

答案 0 :(得分:0)

你真的应该切换到PDO / mysqli,但是对于你当前的代码,它会像(在你的例子中为showers):

<?php
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)):
  $count = 2 + $row["showers"];
  for ($i = 0; $i < $count)
  {
?> 
    <tr>
    <td><?php print $row["Date"];?></td> 
    <td><?php print $row["Inspector1"];?></td> 
    <td><?php print $row["Inspector2"];?></td>
    <td><?php print $row["Building_Name"];?></td>
    <td><?php print $row["Room"];?></td>
    <td><?php print ($i + 1);?></td>  
    </tr>
<?php
  }
endwhile;
?>

您可能希望将$row["shower_no"]更改为$i + 1,因为该列未显示在您的数据库中。

答案 1 :(得分:0)

如果您有各种规则

我会像这样处理这个问题:

<?php 

function printRow($row=array(), $times=1) {
    for($i=0; $i<$times; $i++) {
        echo "
        <tr>
        <td>{$row["Date"]}</td> 
        <td>{$row["Inspector1"]}</td> 
        <td>{$row["Inspector2"]}</td>
        <td>{$row["Building_Name"]}</td>
        <td>{$row["Room"]}</td>
        <td>{$row["shower_no"]}</td>  
        </tr>
        ";
    }
}

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    switch(true) {
        case ($row['eyewashPlumbed']>0 or $row['EyewashBottles']>0):
            printRow($row, 3); // print 3 times
            break;
        case ($row['showers']==0): // print 2 times
            printRow($row, 2);
            break;
        default: // default print 1 time only
            printRow($row, 1);
    }
}
?>