データベースの空室状況をチェックする SQL ステートメントを作成しようとしています。次のことを達成する必要があります。
1) ts_roompref、ts_room、およびts_requestをチェックして、部屋が予約されているかどうかを確認します
- 部屋がまったく予約されていない場合、 ts_roompref でts_room_pref.request_idをチェックしてts_request.idと比較しても、 ts_requestのday_idとperiod_idは見つかりません。
- 部屋のエントリが見つからない場合 (つまり、リクエストされていない場合)、その部屋は無料です
2) ts_request と ts_roompref を比較してday_idとperiod_idの値が見つかった場合は、 ts_allocationテーブルを参照して部屋のステータスを確認する必要があることを意味します。
- リクエストのステータスが「Pending,Failed,Declined」の場合、部屋がまだ割り当てられておらず、まだ利用可能であることを意味します
- ただし、いずれかのリクエスト ステータス = その他の場合は、部屋が割り当てられたことを意味します。
このロジックを実装しようとして、数時間苦労しました。これは私がこれまでに行ったことであり、次のように機能します。
select 1- count(distinct rp.Id) from
ts_roompref rp, ts_request rq
where rp.room_id= "D.0.02" AND rq.id = rp.request_id
AND day_id like "1" AND period_id like "1";
上記のコードは、事実が保留中、割り当て済み、または拒否されている可能性があることを考慮していません。request_id が見つかった場合は、部屋が予約されていると見なされます。リクエストのステータスを確認するように改善するにはどうすればよいですか (必要な場合)。
これが私のSQLフィドルです:http://sqlfiddle.com/#!2/e1021/48