1

餐桌预留

  • Reserve_id
  • roominv_id
  • 切金
  • 退出
  • 状态(已保留、已取消、待定)

桌房存货

  • roominv_id
  • room_id
  • 房间号
  • 房间状态(可用,不可用)

桌房

  • room_id
  • 房型

我正在做一个房间预订系统。

我已经查询了房间的可用日期:

SELECT r.roominv_id,r.room_id 
FROM roominventory r
WHERE r.roominv_id
NOT IN 
(SELECT b.roominv_id
FROM reserve b
WHERE NOT (b.chckout < '$chckin'
OR
b.chckin > '$chckout'))

我的问题是,我将在查询中的哪里插入条件,我可以在哪里选择特定的房间类型,具体取决于房间的可用性。

我知道它就像room.room_type LIKE '%$roomtype%',但我不知道我将在查询的哪一部分插入它。

4

2 回答 2

2

这是使用LEFT JOIN和检查的另一种方法NULL

SELECT 
  r.roominv_id, 
  r.room_id 
FROM roominventory AS r
    INNER JOIN room AS m ON m.room_id = r.room_id
    LEFT JOIN reserve res ON r.roominv_id = res.roominv_id AND
               NOT (b.chckout < '$chckin' OR b.chckin > '$chckout')
WHERE m.room_type LIKE '%$roomtype%' 
    AND res.roominv_id IS NULL

祝你好运。

于 2013-02-02T08:13:07.477 回答
1

你可以JOIN这样的表room

SELECT 
  r.roominv_id, 
  r.room_id 
FROM roominventory AS r
INNER JOIN room AS m ON m.room_id = r.room_id
WHERE m.room_type LIKE '%$roomtype%'
  AND r.roominv_id NOT IN (SELECT b.roominv_id
                           FROM reserve b
                           WHERE NOT (b.chckout < '$chckin'
                                      OR 
                                      b.chckin > '$chckout'));
于 2013-02-02T08:07:16.587 回答