私のSQLはそれほど良くないので、ご容赦ください。
3 つの異なるテーブルの情報を考慮したクエリを作成したいと考えています。
状況を説明しましょう: 顧客が部屋を予約するとき、彼らは複数の部屋を希望しており、部屋は別々の日に予約することができます (1 日に 1 つの一意の予約を行う必要があります)。
ここで、特定の時間に部屋が利用可能かどうかを確認するクエリを書きたいと思います。これらは、データベースにあるテーブルです
部屋
このテーブルには、各部屋に関する情報が格納されます
Fields:
id (primary key)
capacity
img
notes
building_id
roomstructure_id
lecturestyle_id
リクエスト
このテーブルには、行われた各リクエストに関するメッセージが格納されます
Fields
id (primary key)
day_id
period_id
preference_id (foreign key from preference.id)
このテーブルには、行われた各リクエストに関する情報が格納されます。
好み
このテーブルには、すべての部屋の設定に関する情報が格納されます。
id (PK)
request_id (foreign key from request.id)
room_id (foreign key from room.id)
私がやろうとしていることが明らかになったことを願っています。
たとえば、部屋 C233 が月曜日の 09:00 に予約されているかどうかを確認している場合、部屋のテーブルで部屋の情報を検索し、優先テーブルのroom_idを使用してrequest_idを検索する必要があります。
特定の部屋 (部屋設定テーブル内) にリンクされているrequest_idを取得したら、リクエストテーブルで day_id=1 および period_id=1 かどうかを確認できます。day_id=1 かつ period_id=1 の場合、部屋が月曜日の 09:00 に予約されていることを意味します。
これは、部屋が利用できないためカウントされないことを意味しますが、この行が見つからない場合はカウントされます。
これは私がこれまでに書いた SQL です。非常に単純ですが、私がやりたいことすべてを実行するわけではありません。
SELECT COUNT(*) totalCount FROM ts_room
これに加えて、別のフォーラム (このコードはこちら) でアドバイスを提供されました。しかし、それはまったく機能しません。私はそれが私の基準を満たしていないと思います:
SELECT COUNT(*) totalCount
FROM room a
INNER JOIN preference b
ON a.id = b.room_id
INNER JOIN ts_request c
ON b.request_id = c.preference_id
WHERE c.day_id = 1 AND c.period_id = 1
前もって感謝します!