3

開始日と終了日を保持するテーブルがmysqlにあります。これらの開始日と終了日は、ホテルが予約されたときのものです。私がする必要があるのは、予約された日付と当月に利用可能な日付を示すカレンダーを表示することです。今月の予約日を確認するにはどうすればよいですか?今月の各日をループすることはできますが、それは30または31のクエリを意味します。カレンダーの日を色分けできるように、その月に予約されている日を見つけるためのより良い、より最適化された方法はありますか?

テーブル構造は次のとおりです。

hotelid int(11)

startdate(日付)

終了日(日付)

クエリリクエスト:

SELECT * FROM hotel_book WHERE hotelid = 1 AND DATE_FORMAT(startdate,'%Y-%m') >= '2012-08' AND DATE_FORMAT(enddate,'%Y-%m') <= '2012-08'

2012-08-01と2012-08-31に合格できると確信しているので、各チェックで日付形式を処理していません。しかし、単なる例の目的のために。

4

3 に答える 3

2

これに対する別のアプローチは、カレンダーが開始日と終了日を受け入れ、カレンダーロジック内で予約された毎日をレンダリングできるようにすることです。カレンダーがPHPやMySQLではなくjavascriptを使用している場合、サーバーへの影響は最小限に抑えられます。いずれにせよ、ループすることになりますが、それはどこで発生させたいかによって異なります。

于 2012-08-05T15:42:35.723 に答える
0

したがって、最初にホテルIDを取得します。次に、クエリを実行して、そのホテルIDに対応するすべての開始日と終了日を取得します。差を計算する2番目のフィールドがあることをお勧めします。

誰かが1番目から3番目を予約した場合は、2番目も予約されるため、差を計算して'inbetween'フィールドを出力する関数を作成する必要があります。したがって、最初に開始番号を取得してから、終了日まで毎回+1日を追加する必要があります。したがって、array(1,2,3)のようになります。

次に、この情報を取得して、jqueryまたはajaxカレンダー(オ​​ンラインで豊富に入手可能)用に予約された配列に入れることができます。おそらく、日付が予約されると、それを再度予約することはできません。そうしないと、1,2,3の値が重複することになります。したがって、ホテルには1つの部屋しかありません。

于 2012-08-05T15:56:00.063 に答える
0

必要な日付を取得するためのコードは次のとおりです。あなたはそれの論理に関してあなたのカレンダーにそれらを示すことができるでしょう。データベース選択にカスタムクラスを使用したことに注意してください。

$id=$_POST['id'];
$days=$db->select("reservations","room_id=".$id);
$listofdays=array();
foreach ($days $day) {
$start=$day['start'];
$end=$day['end'];
$liste=array(); //This array will be filled with dates between start and end
$liste=date_range($start, $end, $step = '+1 day', $output_format = 'm-d-Y'     );
foreach ($liste as $key => $list) {
$listofdays[] = $list;

}
}

//以下のdate_range関数:

    function date_range($first, $last, $step = '+1 day', $output_format = 'm/d/Y' ) {

$dates = array();
$current = strtotime($first);
$last = strtotime($last);

while( $current <= $last ) {

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
}

return $dates;

};

于 2015-04-14T15:17:12.483 に答える