2012-12-27 37 views
2

我在PHP和MySQL 做酒店預訂系統的項目中,我創建的房間桌子,低於如何在酒店預訂系統中獲取unbook房間的準確mysql查詢?

room_no| roo_id | room_type 
D1  | 1  | Deluxe 
R1  | 2  | AC 
R2  | 3  | Non Ac 
C1  | 4  | Cottage 

此表是關於房代表的酒店客房總數。

這是customer_booking表,

customer_id | Cust_name | email | Address | room_type | room_no| cost|check_in | check_out 
1 | satyawan |[email protected]| xy | AC  | R1 |5000 | 2012-12-26|2012-12-30 
2 |satyawan | [email protected]|unr | Non A/C | R6 |   20002012-01-01|2012-12-07 
3 |satyawan | [email protected]|unr | Non A/C | R8 |   2013-01-01 |2013-01-10 
4 |satyawan | [email protected]|unr | Non A/C | R9 |   2013-01-10 |2013-01-16 
5 |satyawan | [email protected]|unr | Non A/C | R6 |   2013-01-01 |2013-01-20 

我已經燒上的未結算房間類型的數據都該表的連接查詢。查詢低於

SELECT * 
FROM rooms 
LEFT JOIN customer_booking 
ON customer_booking.room_no = rooms.room_no 
WHERE customer_booking.client_id IS NULL 
OR (customer_booking.check_out >= 2013-01-01 
AND customer_booking.check_in >= 2013-01-10) 
OR (customer_booking.check_out <= 2013-01-01 
AND customer_booking.check_out <= 2013-01-10) 

但我只想要沒有預訂房間的數據。 如果房間已經預訂,那麼它必須顯示這個房間已經在這個日期預定。

我無法得知它。

回答

0

嘗試使用此查詢。如果最後一個字段room_customer_id爲0,則房間空閒,否則顯示customer_id誰保留了這個房間。

SELECT rooms.*,COALESCE(customer_booking.customer_id,0) room_customer_id 
FROM rooms 
LEFT JOIN customer_booking ON 
    (customer_booking.room_no = rooms.room_no) 
    and 
    (
     ('2013-01-01' between customer_booking.check_in and customer_booking.check_out) 
     or 
     ('2013-01-10' between customer_booking.check_in and customer_booking.check_out) 
     or 
     (customer_booking.check_in between '2013-01-01' and '2013-01-10') 
    ) 
+0

非常接近......他正在尋找第1至第10個入住範圍,在2013/10/10之間加入/出,你應該很好。 – DRapp

+0

@DRapp我修復了這個查詢。謝謝 – valex

1

也許您在尋找NOT IN

SELECT * FROM rooms AS r WHERE r.room_no NOT IN (
    SELECT cb.room_no FROM customer_booking AS cb WHERE your_checkin_constraints); 
+1

子選擇在性能VS實際LEFT可怕JOIN和測試空(或不能) – DRapp

+0

@DRapp:通常但不總是。 –

0
SELECT r.room,case when r.room_no is null then 'Available' 
    else 'Not Available' end 
    FROM rooms r 
    LEFT JOIN customer_booking cb 
    ON cb.room_no = r.room_no 
    AND cb.check_out <= cur_date()-1 
+0

@DRapp我的怎麼樣? – Mari

0

試試這樣,則U將獲得d間客房都沒有預訂

SELECT * FROM room r WHERE 
not exists (
    SELECT cb.room_no FROM customer_booking cb where cb.room_no=r.room_no);