php mysql显示表中的记录

时间:2014-02-25 07:25:48

标签: php mysql sql

我正在做一个可用性系统。我需要在表格中显示记录。

我的系统基本上是关于房地产,它跟踪房产是否可用。样品是我在公寓有20层,每层有10个单元,所以我需要循环地板数量,并在特定楼层下显示每个单元。

1st flr | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 2nd flr | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

这是我迄今为止所尝试过的:

<table class="table table-bordered">
            <?php
                for($i=0; $row3 = $stmt3->fetch(); $i++){
                  $floor = $row3['floor'];
            ?>
          <tr>
            <td><?php echo $floor; ?></td>
            <?php
                for($i=0; $row4 = $stmt4->fetch(); $i++){
                  $unit_code = $row4['unit_code'];
            ?>
            <td><?php echo $unit_code; ?></td>
            <?php 
              }
            ?>

          </tr>
          <?php 
            }
          ?>
        </table>

但它只显示了一楼的所有记录。

这是实际发生的事情:

1st flr| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 
2nd flr

实现我需求的正确方法是什么?有任何想法吗?我很乐意感谢你的帮助。感谢。

更新

  $stmt3 = $conn->prepare( "SELECT DISTINCT floor
  FROM tblunitsmaster 
  WHERE project_code = :code" );
  $stmt3->execute(array(':code' => $code));


  $stmt4 = $conn->prepare( "SELECT unit_code
  FROM tblunitsmaster 
  WHERE project_code = :code
  AND floor = :floor
  AND sub_project_code = 'SUB-AX0001'" );

5 个答案:

答案 0 :(得分:1)

我不知道你是否已经解决了它,但是Satish Sharma代码在第6行有一个拼写错误。该行应该是

$floor = $row3['floor'];

这将解决您的问题。我真的应该评论答案,但没有足够的分数。

更新了以下代码

<强>更新 每层楼的最新更新及其自己的单位。

<?php
$code = 'so';
$stmt3 = $pdo->prepare( "SELECT DISTINCT floor
FROM tblunitsmaster 
WHERE project_code = :code" );
$stmt3->execute(array(':code' => $code));


$stmt4 = $pdo2->prepare( "SELECT unit_code
FROM tblunitsmaster 
WHERE project_code = :code
AND floor = :floor
AND sub_project_code = 'SUB-AX0001'" );

?>
<table border="1px" class="table table-bordered">
    <?php
    $rows3 = $stmt3->fetchAll();

    foreach ($rows3 as $row3) {
        $floor = $row3['floor'];
        ?>
        <tr>
            <td><?php echo $floor; ?></td>
            <?php
            $stmt4->execute(array(':code' => $code, ':floor' => $floor));
            $rows4 = $stmt4->fetchAll();            
            foreach ($rows4 as $row4) {
                $unit_code = $row4['unit_code'];
                ?>
                <td><?php echo $unit_code; ?></td>
                <?php
            }
            ?>

        </tr>
        <?php
    }
    ?>
</table>

输出:

1st flr 1   2   3   4   5   6   7   8   9   10
2nd flr 1   2   3   4   5   6   7   8   9   10
3rd flr 1   2   3   4   5   6   7   8   9   10

答案 1 :(得分:1)

我认为这可能会解决您的问题:

<table class="table table-bordered">
<?php
    $stmt3 = $conn->prepare("SELECT DISTINCT `floor` FROM `tblunitsmaster` WHERE `project_code` = :code")->execute(array(':code' => $code))->fetchAll(PDO::FETCH_ASSOC);
    $stmt4 = $conn->prepare("SELECT `unit_code` FROM `tblunitsmaster` WHERE `project_code` = :code AND `floor` = :floor AND `sub_project_code` = 'SUB-AX0001");

    foreach ($stmt3 as $row3){
        $floor = $row3['floor'];

        echo '<tr></td>'.$floor.'</td>';

        if ($stmt4->execute(array(':code' => $code, ':floor' => $floor))){
            foreach ($stmt4->fetchAll(PDO::FETCH_ASSOC) as $row4){
                echo '<td>'.$row4['unit_code'].'</td>';
            }
        }

        echo '</tr>';
    }
?>
</table>

答案 2 :(得分:0)

您需要重置$stmt4-

的结果

试试这个

<table class="table table-bordered">
            <?php
                $rows3 = $stmt3->fetchAll();
                $rows4 = $stmt4->fetchAll();
                foreach($rows3 as $row3){
                  $floor = $row['floor'];
            ?>
          <tr>
            <td><?php echo $floor; ?></td>
            <?php
                foreach($rows4 as $row4){
                  $unit_code = $row4['unit_code'];
            ?>
            <td><?php echo $unit_code; ?></td>
            <?php 
              }

            ?>

          </tr>
          <?php 
            }
          ?>
        </table>

答案 3 :(得分:0)

for($i=0; $row3 = $stmt3->fetch(); $i++)

$ stmt3是什么?

我认为您使用的是FOR loop错误。第二部分,即$row3 = $stmt3->fetch(),应该是评估,而不是变量的设置。

你可能正在寻找类似的东西: for($i=0; $stmt3->fetch() <> null; $i++){ $row3 = $stmt3->fetch()

第二个FOR循环相同。

答案可能有点不对劲。

答案 4 :(得分:0)

将sql调用放在循环中真的不是一个好主意。相反,构建您的数据库调用以正确分组数据 - “选择楼层,condo_unit逐层,condo_unit”。然后,遍历结果集。