2012-09-02 152 views
0

所以我有一個問題,在我的ASP.Net網站上,我希望它顯示當前所有可用和未使用的房間。當我說不使用時,我的意思是目前沒有人保留該房間,所以systemdate不在簽入和簽出日期的任何值之間。數據庫酒店預訂

我的架構的一部分:

CREATE TABLE "Rooms"(

    RoomNo int NOT NULL, 
    RoomType nvarchar(20) NULL, 
    PricePerNight money NULL, 
    MaximumOccupancy int NULL, 
    NoOfBeds int NULL, 
    NoOfBathrooms int NULL, 
    Entertainment bit NULL, 
    RoomService bit NULL, 
    Gym bit NULL, 

    CONSTRAINT PK_Rooms PRIMARY KEY(RoomNo) 
) 
CREATE TABLE "Reservation"(

    ReservationID int IDENTITY (1,1) NOT NULL, 
    CustomerID int NOT NULL, 
    RoomNo int NOT NULL, 
    CheckInDate date NOT NULL, 
    CheckOutDate date NOT NULL, 
    NoOfDays int NOT NULL, 

    CONSTRAINT PK_Reservation PRIMARY KEY(ReservationID), 

    CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY(CustomerID) 
     REFERENCES dbo.Customers(CustomerID), 

    CONSTRAINT FK_Reservation_Rooms_RoomNo FOREIGN KEY(RoomNo) 
     REFERENCES dbo.Rooms(RoomNo) 
) 

因此,繼承人我的主意,即時通訊假設即時通訊將需要一個SQL查詢其是這樣的:

選擇所有的房間,& CheckInDate! =「選擇CheckIndate從 保留」和& CheckOutDate!=「選擇CheckOutDate從 保留」。

但是這有一些缺陷。

有人可以告訴我我該如何做到這一點,我可以如何讓我的Sue-do-code(讓我們稱之爲)更加可行,因爲我不確定這樣的事情是否會起作用,並且如果一定建議我可以對我的模式進行改進。

TLDR;我需要一個查詢,其中有人輸入checkindate和checkoutdate,並返回所有可用的房間。

+0

我想出了其他的東西,可能第一次走錯了路。 (dbo.Rooms.RoomNo = dbo.Reservation.RoomNo) WHERE GETDATE()NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate; - 會有這樣的工作嗎?但是它會獨一無二地搜索到每個房間嗎? – user1638362

+0

這看起來像你會抓住所有有保留的房間,但與res日期不包括你正在尋找的日期。如果一個房間沒有預訂,它將不會顯示在這個查詢上。 – NealR

回答

0

試試這個..

SELECT * FROM 客房 WHERE NOT EXISTS (SELECT * FROM 房屋R,預訂RS WHERE r.RoomNo = rs.RoomNo和GETDATE()之間rs.CheckInDate AND rs.CheckOutDate)

+0

對不起,應該讀取GETDATE()BETWEEN,而不是GETDATE()而不是BETWEEN。剛剛編輯。 – NealR

+0

嗨thnx ive已經試過了。我的答案有效:) – user1638362

0

這就是我想要的。

SELECT dbo.Rooms.RoomNo 
FROM dbo.Rooms JOIN dbo.Reservation 
ON (dbo.Rooms.RoomNo = dbo.Reservation.RoomNo) 
WHERE '2012-01-01' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate 
AND '2012-01-05' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate; 

花了時間,但我最終得到了它。 where語句的初始日期可以用&日期替換。

+0

好吧,這實際上不起作用 – user1638362