2013-02-02 37 views
1

表储备选择房间类型

  • reserve_id
  • roominv_id
  • chckin
  • chckout
  • 状态(预留,取消,待定)

表roominventory

  • roominv_id
  • ROOM_ID
  • room_number
  • room_status(可用,不可用)

表室

  • ROOM_ID
  • room_type

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

我已经有房间的日可用性查询:

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%'但我不知道我将插入它的查询的哪一部分。由于

回答

1

可以JOINroom这样的:

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

谢谢你的快速和准确的答案。 –

+0

@AguaBendito - 随时欢迎您:)很高兴能为您提供帮助。 –

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 

好运。