循环访问数据库表数据并以适当的格式显示它

时间:2014-06-18 07:13:32

标签: php mysql

我在数据库中有两个表。

TABLE ROOM 包含以下列和数据

id(int)    room_type(varchar)      price(int)
 1           single room              25000
 2           double room              50000  

TABLE ROOM_IMAGE 包含以下列和数据

id(int)     image(varchar)         room_id(int)
 1            single.jpg                 1
 2            single1.jpg                1
 3            double.jpg                 2

当我使用以下PHP代码时:

    <?php
    $query = "SELECT a.room_type, s.image FROM room as a 
            JOIN room_image as s
            ON a.id = s.room_id ";
?>
<?php if ($rooms = $mysqli->query($query)) { ?>

  <?php while ($room = $rooms->fetch_object()) { ?>

    <h4><?php echo $room->type; ?></h4>
    <p><?php echo $room->image; ?></p>

  <?php } ?>

<?php } ?>

我得到以下结果:

        single room
       single.jpg
    single room
           single1.jpg
    double room
           double.jpg

但我希望我的结果显示如下

        single room
           single.jpg
           single1.jpg
        double room
           double.jpg

所以有人可以帮我编写正确的php语法来产生所需的结果(最好使用join sql语句)

2 个答案:

答案 0 :(得分:1)

首先根据房间类型为查询添加ORDER BY子句。这将把每种类型的所有房间排成一行

$query = "SELECT a.room_type, s.image FROM room as a 
        JOIN room_image as s
        ON a.id = s.room_id  ORDER BY a.room_type";

然后,仅在之前未显示类型时显示。使用额外的变量来跟踪它。

 <?php 
  $lastType="";
  while ($room = $rooms->fetch_object())
    { 
      if($lastType!=$room->type) 
      {
       echo "<h4>",$room->type,"</h4>";
      }
      echo "<p>",$room->image,"</p>";
      $lastType=$room-type;          // This variable keeps track of room type display
    } 
 ?>

答案 1 :(得分:0)

而不是使用连接查询。只需将图像添加到房间表下的字段中,只查询一个表。

<强>数据库:

id(int)    room_type(varchar)      price(int)    images(varchar)
 1           single room              25000         ["single.jpg","single1.jpg"]
 2           double room              50000         ["double.jpg"]

<强> PHP:

$images = json_decode($room->image);
foreach($images as $image){
  echo $image;
}