2013-02-02 36 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 

好運。