php函数的逻辑

时间:2012-07-06 09:06:09

标签: php mysql

我需要制作一个用于检查酒店房间可用性的PHP代码,其中当前用户可以预订房间长达90天或更少,并且酒店总共有30个房间,所以如果我为用户存储数据喜欢他从一个日期到另一个日期的预订,如果我想检查可用性我应该如何在php中进行,那将是什么逻辑。

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

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

3 个答案:

答案 0 :(得分:1)

这看起来像Zend_DB_Select

试试这个:

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

“?”哪里缺少那么......

答案 1 :(得分:1)

我认为,您希望在预订日历中找到可用空间。

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

  1. 确认的预订期限内不应出现开始日期和/或结束日期。
  2. 开始日期和结束日期之间没有句点。
  3. 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)
        )