2015-03-31 44 views
0

在預訂系統中尋找免費房間時遇到一些小問題。
我發現了一些解決方案,但它們似乎不起作用。MySQL在預訂系統中尋找免費房間

我的表:

create table room 
(
    roomID    int not null, 
    maxPeople   numeric(2,0) not null, 
    beds     numeric(2,0) not null, 
    primary key (roomID) 
); 

(
    reservationID  int not null, 
    clientID    int, 
    roomID    int, 
    startDate   date not null, 
    endDate    date not null, 
    primary key (reservationID) 
); 

我想是這樣的,但是我們在計算所有的客房和完全忽略免費客房。

SELECT Id_pokoju 
from rezerwacje 
WHERE 
(
    (SELECT COUNT(ID_pokoju) 
    from rezerwacje 
    WHERE "2015-03-10" > Data_konca OR "2015-03-20" < Data_konca) 
    = 
    (SELECT COUNT(ID_pokoju) 
    from rezerwacje 
    GROUP BY Id_pokoju) 
); 
+1

請使用與上面提供的表格相同的列名重寫您的請求。 – 2015-03-31 10:47:26

+0

所以,你有2個表格:房間和預訂。你想找到所有房間,在一定時間內沒有保留?你爲什麼只比較結束日期​​(Data_konca)? startDate也是必需的。 – user4035 2015-03-31 11:06:04

+0

[Reservation system dates]的可能重複(http://stackoverflow.com/questions/10304552/reservation-system-dates) – 2015-03-31 11:15:02

回答

0

要搜索所有的客房,在一定時間內沒有預訂,考慮以下因素:

SELECT roomID FROM room WHERE roomID NOT IN(
    SELECT roomID FROM reservation WHERE startDate < @EndDate AND endDate > @StartDate 
) 

這是怎麼回事呢?

在內部查詢中,我在預訂列表中搜索至少部分位於所需時間範圍內的預訂,並獲取其房間ID。然後,在外部查詢中,我從房間表中請求未列出的所有房間ID,也就是說,它們沒有至少部分在所需時間範圍內的預留。

@StartDate和@EndDate必須由你修改 - 你必須把你的變量放在那裏。