2012-04-24 17 views
1

私はこのトラフをPHP & Mysqlと考えて問題があります。私はHow to implement check availability in hotel reservation systemといくつかを読んだが、彼らは異なっているようだ。ご予約システムの日付

私は対流室を6時間以上予約できる予約システムを作る必要があります。したがって、ユーザーが24/04/2012のような日付に予約すると、レンタルの開始時刻を選択します(00:00-06:00, 06:00-12:00, 12:00-18:00,18:00-24:00).ユーザーが部屋を借りたい時間数(6,12,18など)。

日付は整数(タイムスタンプ)として保存されます。

私はこれに2つの問題があります。部屋がまだ予約されている可能性のあるすべての日を受け取る方法と、新しい予約が可能かどうかを確認する方法はわかりません。

私は、ユーザーの入力に開始日と終了日を計算する方法を知っているが、私は、可用性のための正しいmysqlのクエリまたはPHPのチェックを見つける傾けます。

これはおそらく本当に単純ですが、何とか終了日は常に可変なので私は答えを見つけることができません。

ありがとうございました!

EDIT表構造:予約

 
id int(11)   
user_id int(11)  
reservation_name varchar(255)  
start_date int(11)   
end_date int(11)   

私は予約があなたはそれがMySQLで利用可能日の一覧を生成することはかなり難しい見つけることができます関連

+1

でそれを集約することができますがあなたのテーブル構造。あなたの質問を編集し、あなたのデータベース内のそれぞれの関連する 'table'の' DESCRIBE table; 'の出力を '

'タグの間に貼り付けます。 –
                        
                            
    eggyal
                                
                            
                        
                    

+0

テーブルの構造は? –

+0

申し訳ありません、今追加されたとは思いませんでした。 –

答えて

1

一つだけであると信じています。代わりに、あなたが希望する月の中で予約された日の順序付きリストを選択し、PHPがMySQLクエリから次の予約日と一致する場合はその日をスキップしてその月の全日にわたってループすることをお勧めします。 this questionへの答えは、PHPでループしたい日付を作成するのに役立ちます。擬似コードで:

$booked_days = sql(select all booked days in month order by day); 
for each $day in month { 
    if $day != current($booked_days) { 
     // $day is not booked 
    } else advance_next($booked_days); 
} 

新しい予約が可能であるかどうかを確認するには、a very similar questionに私の答え以前の今日のを見てしたい場合があります。

+0

私は仕事に就いていないので今はテストできませんが、リンク先の質問で作成したクエリが上記のコメントに似ています。おかげさまで、私はこれを8時間ほど続けました。ロジックは時々ハードと思われる.. –

0

この華麗なシンプルなMySQLのクエリは、トリックを行う必要があります。

Checking for overlapping car reservations

このソリューションは、唯一の「日付」のためですが、あなたは、単にそれを含めるために役立つだろう、追加の「時間」

関連する問題