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

私はあなたがあなたの予約カレンダーで空きスペースを見つけたいと思います。

つまり、開始日と終了日があります。あなたはすべての部屋を見て、次の仮定をします:

  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 に答える
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 に答える
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 に答える