2014-02-25 107 views
0

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

我的系统基本上是跟踪房地产是否可用的房地产。示例是我有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 

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

UPDATE:

$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'"); 
+0

你需要添加你的db结构和你正在创建的sql调用。 –

+0

这是因为你的内循环首先被执行,即所有'unit_code'都是在'floor'可以改变之前打印出来的。解决这个问题的一种方法是改变你的查询来通过'floor'获取'unit_code'。 –

+0

@ICanHasCheezburger你能提供样本查询吗? – Dunkey

回答

1

我不知道你是否已经解决了,但Satish Sharma代码有6行错字该行应

$floor = $row3['floor']; 

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

更新后的代码如下

UPDATE: 最新每层都有自己的一套单位更新。

<?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> 

OUTPUT:

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 
+0

是的,我更新了他的代码,但我仍然没有得到在每个楼层显示的正确记录 – Dunkey

+0

@Dunkey - 它为我工作。当然,我使用自己的SQL,但我猜想所有的楼层都会有相同的单位(比如1-10)。如果情况并非如此,那么逻辑错误,让我知道。我发布了我工作的整个代码。请看看你是否可以使用这个。你也可以用你自己的SQL来分享你从这段代码中得到的输出。 – Tau

+0

是的,我对所有单位都有同一层楼 – Dunkey

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> 
+0

什么是data_seek(0)? – Dunkey

+0

它再次指向第一个结果你试过吗? –

+0

是的,但我得到错误,致命错误:调用未定义的方法PDOStatement :: data_seek()在第171行,第171行是:$ stmt4-> data_seek(0);//使用此来重新设置您的结果 – Dunkey

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循环。

我的答案可能有点不对。

+0

我在我的帖子中添加了stmt3。 – Dunkey

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> 
0

这确实不是把SQL调用在一个循环是一个好主意。相反,构建你的数据库调用,以正确分组数据 - “选择楼层,condo_unit一层一层,condo_unit”。然后,遍历结果集。