1

我需要制作一个 php 代码来检查酒店房间的可用性,从现在开始,用户可以预订最多 90 天或更短的房间,并且酒店总共有 30 间客房可用,所以如果我为像他的预订这样的用户存储数据从一个日期到另一个下一次如果我想检查可用性我应该如何在 php 中执行它,逻辑是什么。

显然我这样的简单查询对于例如是不正确的

$this->db->select('*')
    ->from('default_bookings')
    ->where('booking_from <',$input['fromdate'])
    ->where('booking_till >',$input['tilldate']);
4

3 回答 3

1

这看起来像Zend_DB_Select

试试这个:

$this->db->select('*')
->form('default_bookings')
->where('booking_from < ?',$input['fromdate'])
->where('booking_till > ?',$input['tilldate']);

这 ”?” 那么在哪里失踪......

于 2012-07-06T09:07:36.633 回答
1

我假设,您想在预订日历中找到可用空间。

所以你有一个开始日期和一个结束日期。您查看每个房间并做出以下假设:

  1. 开始日期和/或结束日期不应出现在确认的预订期内。
  2. 开始日期和结束日期之间没有时间段。

SQL 查询可能如下所示:

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,则与现有预留没有交集。

您还可以通过将此查询用作子查询来自动执行“查看房间”。

于 2012-07-06T09:32:24.237 回答
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)
        ) 
于 2016-12-02T23:06:12.147 回答