SQL PHP:如何选择和获取这样的?

时间:2017-02-19 04:07:49

标签: php mysql pdo

您好我知道如何使用关于select,join,fetch
的基本SQL 但是我不知道如何在我的网站上获取这样的内容(见截图)

enter image description here

来自截图它也有列room_number。

<table>
<tr>
   <td>room no.</td>
   <td>room name</td>
</tr>

<?php
$sql = SELECT * FROM si_room;
$query = $db->query($sql);

while($row = $query->fetch(PDO::FETCH_ASSOC))
{  ?>
   <tr>
       <td><?php echo ????? ; ?></td>
       <td><?php echo ?????; ?></td>
   </tr>
<?php } ?> 
</table>

更新:

我尝试使用此代码

<?php
    $sql = "SELECT * FROM si_room";
    $querymain = $db->query($sql)->fetchAll(PDO::FETCH_GROUP);
    ?>
    <table>
    <tr>
      <td>room no.</td>
      <td>room_name</td>
    </tr>
    <?php 
    foreach ($querymain as $list_id => $list_data) 
    {
        echo "<tr>";
        echo "<td> floor ".$list_data[0]['room_floor']."<br>"; 
        foreach ($list_data as $row)
        {                                       
            echo $row['room_no']."</td>";
            echo "<td>".$row['room_name']."</td>";
         }
    } ?>
    </tr>
    </table>

但结果是

2楼

201 |房间A

2楼

202 |房间B

3楼

301 |房间E

3楼

302 |房间F

那不是我想要的。

1 个答案:

答案 0 :(得分:2)

幸运的是,您正在使用已经具有此功能的PDO,它可以完全按照您的需要进行操作 - 根据某些列对数据进行分组。

PDO can group results into the nested arrays,基于所选的第一个字段。因此,您需要将列表ID列为字段列表中的第一个字段,然后使用上述获取模式的fetchAll()获取行:

$sql = "select room_floor, room_name, room_no from si_room";
$building = $dbh->query($sql)->fetchAll(PDO::FETCH_GROUP);

现在你得到一个整洁的嵌套数组,你的行按列表ID分组!

为了使输出整齐,你必须使用两个嵌套的foreach运算符

foreach ($building as $floor_no => $rooms)
{
     echo $floor_no."\n"; 
     foreach ($rooms as $row)
     {
         echo $row['room_name']."\n";
     }
}