mysql - MySQL 查询检查特定房间的可用性取决于两个输入日期
问题描述
我被困在如何检查可用房间取决于用户的两个输入日期。
假设有一个用户试图签入日期2018-05-05
为2018-05-06
.
用户提交表单后,系统应检查该特定日期是否有可用房间。
结果返回应该只有两种房间:
Room_Name | Price
standard | 300
premier | 900
MySQL 表
Reservations
ID | User | Check_in | Check_out
1 | john | 2018-05-03 | 2018-05-07
2 | jane | 2018-05-04 | 2018-05-07
Reservations_Details
ID | Reservation_ID | Rooms_ID
5 | 1 | 2
6 | 2 | 3
Rooms
ID | Rooms_Type_ID | Room_No | Room_Status_ID
1 | 1 | 101 | 1
2 | 1 | 102 | 2
3 | 1 | 103 | 1
4 | 2 | 201 | 3
5 | 3 | 301 | 1
6 | 3 | 302 | 1
Rooms_Type
ID | Room_Name | Price | Units
1 | standard | 300 | 3
2 | deluxe | 600 | 1
3 | premier | 900 | 2
Room_Status
ID | Status
1 | vacant
2 | occupied
3 | reserved
询问
我有这样的查询,但这仅适用于status = vacant的可用房间
SELECT rooms_type.room_name, rooms_type.price
FROM rooms_type
JOIN rooms ON rooms.rooms_type_id = rooms_type.id
WHERE rooms.status_id = 1
GROUP BY rooms_type.room_name
如果可能的话,我想不出如何在一个查询中生成结果。
解决方案
假设您有 start_date 和 end_date。它会给你所有可用房间的ID
试试这个查询
SELECT Rooms.Room_No
FROM Rooms
JOIN Reservations_Details ON rooms.ID = Reservations_Details.Rooms_ID
JOIN Reservations ON Reservations.ID = Reservations_Details.Reservation_ID
WHERE (start_date < Check_in AND start_date < Check_out AND
end_date < Check_in AND end_date < Check_out) OR
(start_date > Check_in AND start_date > Check_out AND
end_date > Check_in AND end_date > Check_out)
推荐阅读
- python-3.x - 我无法与 Kibana 服务器通信
- json - 使用 ExtJs 在 asp.net MVC 和 WebApi 应用程序中为 MacO 上的 Safari 序列化日期
- java - 如何在 Aerospike Spring Data 中使用 CAS 感知策略保存文档
- batch-file - 删除字母和特殊情况。仅显示特定行文本的数量
- android - 如何为移动设备开发微应用程序(ios和android)
- python - 使用正则表达式从熊猫数据框中的列中提取数据
- java - 在 weblogic 12c 中使用 validator.validate 时获取类转换异常
- c# - ASP.NET MVC - 在异步电子邮件发送完成之前不会返回视图
- r - 使用 str split 但基于特殊字符的位置
- firebase-realtime-database - 如何在 Angular 6 和 Firebase 实时数据库中按值删除