0

アイテム テーブルがあります: itemID、itemName 各アイテムは一定期間予約できます。アイテムごとに複数の予約が存在する可能性があります。予約が重複することはありません。

予約は予約テーブルに保持されます: itemID、startDate、endDate

日数、開始日、終了日を指定し、指定された開始日と終了日の間で、その日数以下の長さの予約されていない期間を持つアイテムを検索したいと考えています。つまり、指定された日付範囲内の「短期在庫」アイテムを探しています。次に、itemID ごとに短期間の在庫の開始日と終了日のリストを返したいと考えています。

理想的には単一のMySQLクエリでこれを行う方法についての提案をいただければ幸いですが、PHPループで長時間実行しても問題ありません。

これまでのところ、私のアプローチは、指定された開始日と終了日内またはそれらにまたがる予約を含む予約テーブル内のすべての一意の itemID を取得し、PHP と MySQL クエリの組み合わせで全体の範囲を解析し、itemID と配列への「短期期間」の開始日と終了日ですが、それはエレガントなアプローチではありません。

ありがとうございました

4

2 に答える 2

0

それはすべて、日付がどのように構成されているかによって異なります。それらが DD/MM/YYYY 形式で、値が単なる int 03221990 である場合、単純な大なり演算子または小なり演算子を使用して利用可能な日付を分離しようとすることができ、それはすべてクエリで実行できます。そうすれば、大まかな日付の説明に適合するさまざまなアイテムを見つけることができますが、必ずしも開始日と終了日に正確に従う必要はありません。日付はどのように構成されていますか?

于 2012-08-01T21:03:05.553 に答える
0

予約テーブルは次のようになります。

ItemID | booked
23 | 2012-08-01
23 | 2012-08-02
23 | 2012-08-03

アイテム 23 が 3 日間予約されている場合。そのため、アイテムが予約されると行を追加します。

個々の日付ごとに 2012 年 8 月 3 日から 2012 年 8 月 5 日までの日付範囲が与えられた場合、bookings テーブルにない項目を選択します。正確にはわかりませんが、「完全外部結合」で実現できると思います。

于 2012-08-01T22:14:21.913 に答える