2015-10-10 101 views
1

我正在为一家小酒店预订/预订系统。我对PHP很满意,但对SQL不太好......我在表单中输入了您的信息,房间数量以及使用日历选择抵达日期和退房日期。酒店客房预订

现在一切都很顺利,直到我必须检查哪些房间可用,这让我头痛。有10间客房可以预订。

我目前在MySQL中有一个存储信息,日期,预订ID和房间号/号码的表。

你如何让SQL检查哪些房间可用而不是?

如果它看起来像

"SELECT * FROM bookings WHERE checkinDate >= '$formCheckin' 
AND checkoutDate <= '$formCheckout' " 

然后拿到roomID并计数?

任何帮助非常感谢!

+0

你真的应该制作一个房间表,并分配一个索引来标记它们是否被占用,这会真的为你放松一切。 – Akshay

+1

你看过本页右侧的一些“相关”问题吗?他们可能会给你一些想法? –

+0

语法错误在这里'checkinDate =>'你需要反转这些符号。 '=>'不会做你认为它做的事。 –

回答

2

如果你想知道,如果一个房间期间是可用的,那么逻辑是这样的:

SELECT r.* 
FROM rooms r 
WHERE NOT EXISTS (SELECT 1 
        FROM bookings b 
        WHERE b.roomid = r.roomid AND 
         b.checkinDate <= $formCheckOut AND 
         b.checkoutDate >= '$formCheckIn 
       ); 

我是否需要针对这两个平等的比较没有把握。逻辑是,如果没有预订在结帐日期之前开始,并且在签入日期之后结束,则房间可用。

但是,对于十个房间,我可能会建议您每天保留一个房间的桌子,比如说未来十年(每年再增加一次)。这样的表格不是很大,可能更容易理解如何使用它。另外,你可以处理一些事情,比如一对夫妇预定一个星期的房间,但前三天只有一个人在房间里。

+0

我想你在子查询 – FuzzyTree

+0

@FuzzyTree中缺少'AND b.roomId = r.Id'的内容。 。 。谢谢。 –