【发布时间】:2012-09-02 18:16:02
【问题描述】:
所以我有一点问题,在我的 ASP.Net 网站上,我希望它显示所有当前可用且未使用的房间。当我说未使用时,我的意思是目前没有人为那个房间预留,所以系统日期不在 checkin 和 checkoutdate 的任何值之间。
我的部分架构:
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 查询:
Select All FROM Rooms Where &CheckInDate != "Select CheckIndate From Reservation" AND &CheckOutDate != "Select CheckOutDate From 预订”。
但这有一些缺陷。
有人可以告诉我如何做到这一点,如何使我的 Sue-do-code(让我们称之为)更可行,因为我不确定这样的事情是否可行,如果有必要建议改进我可以制作我的架构。
TLDR;我需要一个查询,其中有人输入了 checkindate 和 checkoutdate,它会返回所有可用的房间。
【问题讨论】:
-
我想出了别的办法,可能第一次走错路了。从 dbo.Rooms 中选择 dbo.Rooms.RoomNo 加入 dbo.Reservation ON (dbo.Rooms.RoomNo = dbo.Reservation.RoomNo) WHERE GETDATE() 不在 dbo.Reservation.CheckInDate 和 dbo.Reservation.CheckOutDate 之间; - 这样的事情有用吗?但它会对每个房间进行唯一的搜索吗?
-
这看起来你会抓住所有有预订的房间,但 res 日期不包括你正在寻找的日期。如果房间没有预订,则不会显示在此查询中。
标签: c# asp.net sql-server-2012