我需要制作一个用于检查酒店房间可用性的PHP代码,其中当前用户可以预订房间长达90天或更少,并且酒店总共有30个房间,所以如果我为用户存储数据喜欢他从一个日期到另一个日期的预订,如果我想检查可用性我应该如何在php中进行,那将是什么逻辑。
显然我这样的简单查询是不正确的 例如$this->db->select('*')
->from('default_bookings')
->where('booking_from <',$input['fromdate'])
->where('booking_till >',$input['tilldate']);
答案 0 :(得分:1)
这看起来像Zend_DB_Select
试试这个:
$this->db->select('*')
->form('default_bookings')
->where('booking_from < ?',$input['fromdate'])
->where('booking_till > ?',$input['tilldate']);
“?”哪里缺少那么......
答案 1 :(得分:1)
我认为,您希望在预订日历中找到可用空间。
所以你有一个开始日期和结束日期。你看看每个房间并做出以下假设:
SQL-Query可能如下所示:
Table bookings {
int booking_id
int room_id
datetime reservation_start
datetime reservation_end
...
}
SELECT
COUNT(*)
FROM
bookings AS test1
WHERE
room_id={$roomId}
AND
{$startdate} NOT BETWEEN reservation_start AND reservation_end
AND
{$enddate} NOT BETWEEN reservation_start AND reservation_end
AND
reservation_start NOT BETWEEN {$startdate} AND {$enddate};
结果是0,那么与现有预约没有交集。
您还可以使用此查询作为子查询自动执行“查找房间”。
答案 2 :(得分:0)
这对我有用。如果结果为0,则间隔中没有预订。抵达当天可以与出发当天相同。
SELECT COUNT(*)
FROM booking
WHERE room_id = :room_id
AND (
(date_to > :start AND date_to < :end)
OR
(date_from > :start AND date_from < :end)
OR
(date_from < :start AND date_to > :end)
)