3

部屋の予約を格納するテーブルがあります。スキーマは次のとおりです。

ID | ROOM_ID | CHECK_IN_DATE | CHECK_OUT_DATE | USER_ID

設定された日付範囲の間に利用可能/利用不可の部屋の検索クエリを実行する必要があります。

また、部屋が事前予約された日付とその形式を保持する別のテーブルが存在することにも注意してください。

ROOM_ID | DATE

だから私は設定された範囲内で利用可能な部屋を探すクエリを実行する必要があります、どのようにクエリを定式化しますか?ここではMySQLを使用しています。

- -編集 - -

スキーマのRoomsテーブルもあります。

ID | ROOM DETAILS etc

利用不可/事前予約の日付テーブルには、基本的に散発的な単一の日付が含まれます。利用不可のテーブルの各日付は、メンテナンスなどの理由で部屋を予約できない日付を指します。

4

3 に答える 3

2
SELECT
   ROOM_ID
FROM
   Rooms r
   LEFT JOIN Bookings b ON (
      r.ROOM_ID = b.ROOM_ID
      AND b.CHECK_IN_DATE > '$MAX_DATE'
      AND b.CHECK_OUT_DATE < '$MIN_DATE'
   )

日付の範囲がないため、事前に予約した部屋がどのように考慮されるかはわかりません。事前に予約された部屋も予約のエントリを取得しますか?

于 2011-02-23T14:22:43.063 に答える
1
SELECT id FROM rooms WHERE id NOT IN (
   SELECT room_id FROM bookings 
   WHERE check_in_date < 'end date' AND check_out_date > 'start date'
);
于 2011-02-23T14:22:05.407 に答える
0

5つの可能な方法があります:

---s-----e---

s-e----------
--s-e--------
-----s-e-e---
--------s-e--
----------s-e

s = start / e = end firste行はデータベースセットであり、他は可能な検索です

最初と最後のものだけが必要なものなので、探しているのは次のとおりです。search.end<entry.startまたはsearch.start>entry.end

于 2011-02-23T14:22:52.667 に答える