如何在我的表中显示不可用的房间

时间:2015-07-29 06:21:07

标签: php mysql

这是我的疑问:

$result = mysql_query("
           Select count(RoomType) AS Available_Rooms, RoomType, RoomRate 
           FROM tb_rooms 
           WHERE RoomNumber NOT IN (Select tb_roomsreserved.RoomNumber 
                                    From tb_roomsreserved 
                                    LEFT JOIN tb_reserved on tb_roomsreserved.reserved_id = tb_reserved.reserved_id 
                                    WHERE $arrival < tb_reserved.Departure AND $departure >tb_reserved.Arrival 
                                    UNION Select tb_roomsguest.RoomNumber From tb_roomsguest 
                                          LEFT JOIN tb_guest on tb_roomsguest.id = tb_guest.id 
                                          WHERE  $arrival < tb_guest.Departure AND $departure >tb_guest.Arrival 
                                          AND tb_guest.Status = 'Approved' 
                                          UNION Select tb_roomscheckin.RoomNumber From tb_roomscheckin 
                                                LEFT JOIN tb_checkin on tb_roomscheckin.checkin_id = tb_checkin.checkin_id 
                                                WHERE  $arrival < tb_checkin.Departure AND $departure >tb_checkin.Arrival
                                    ) 
       GROUP BY RoomType") or die (mysql_error());

这是我的表:

echo '<table style = "margin-bottom: 2.5%;" width = "90%">';
    while($row = mysql_fetch_array($result)){   
            echo '<tr><td align = "center">';
            echo $row['Available_Rooms'];
            echo '</td><td align = "center">';
            echo $row['RoomType'];
            echo '</td><td align = "center">';
            echo 'Available';
            echo '</td></tr>';
        }

    echo '</table>';

如何回应那些不可用的房间?我的查询仅显示可用的房间。

通常情况下,当所有房间都可用时,我的桌子就像这样。

Available_Rooms          RoomType           Availability
       5                 AtticRoom            Available
       4                 Deluxe               Available
       4                 FamilyRoom           Available
       13                StandardRoom         Available

但是当豪华和家庭客房入住0间客房时。输出就是这些。

Available_Rooms          RoomType           Availability
       5                 AtticRoom            Available
       13                StandardRoom         Available

我一直在考虑如何做到这一点。

我最终得到了这个输出。

Available_Rooms          RoomType             RoomRate
       5                 AtticRoom              2000
       13                StandardRoom           2500

我的tb_rooms包含

RoomNumber       RoomType         RoomRate
201             FamilyRoom         3500
202            StandardRoom        2500
203            StandardRoom        2500
204            StandardRoom        2500
205            StandardRoom        2500
206            StandardRoom        2500
207            StandardRoom        2500
208            StandardRoom        2500
209            StandardRoom        2500
210            StandardRoom        2500
211            Deluxe              2300
212            FamilyRoom          3500
214            Deluxe              2300
301            FamilyRoom          3500
302            FamilyRoom          3500
303            StandardRoom        2500
304            StandardRoom        2500
305            StandardRoom        2500
306            StandardRoom        2500
307            StandardRoom        2500
308            Deluxe              2300
309            Deluxe              2300
401            AtticRoom           2000
402            AtticRoom           2000
403            AtticRoom           2000
404            AtticRoom           2000
405            AtticRoom           2000

1 个答案:

答案 0 :(得分:0)

使用以下查询

$result = mysql_query("Select (CASE WHEN count(RoomType) > 0 THEN count(RoomType) ELSE 0 END) AS Available_Rooms, RoomType, RoomRate 
                   FROM tb_rooms 
                   WHERE RoomNumber NOT IN (
                         Select tb_roomsreserved.RoomNumber 
                         FROM tb_roomsreserved 
                         LEFT JOIN tb_reserved on tb_roomsreserved.reserved_id = tb_reserved.reserved_id 
                         WHERE $arrival < tb_reserved.Departure AND $departure >tb_reserved.Arrival 
                         UNION Select tb_roomsguest.RoomNumber 
                               FROM tb_roomsguest 
                               LEFT JOIN tb_guest on tb_roomsguest.id = tb_guest.id 
                               WHERE  $arrival < tb_guest.Departure AND $departure >tb_guest.Arrival AND tb_guest.Status = 'Approved' 
                               UNION Select tb_roomscheckin.RoomNumber 
                                     FROM tb_roomscheckin 
                                     LEFT JOIN tb_checkin on tb_roomscheckin.checkin_id = tb_checkin.checkin_id 
                                     WHERE  $arrival < tb_checkin.Departure AND $departure >tb_checkin.Arrival
                    )
                    GROUP BY RoomType") or die (mysql_error());