我需要的是根据保存在同一个表中的现有“reservations”从表1中检索可用的“cars”,其中“car”和“reservations”具有相同的元表,该元表的key=>value列中保存了预订的开始日期和结束时间,例如:
卡拉有以下保留:
7月4日至7月8日
7月9日至7月14日
7月18日至7月20日
如果用户查询7月15日至7月17日期间的可用汽车,则应返回可用的cara。
如果查询7月14日至7月17日的现车,cara不提供。
如果查询7月16日至7月18日期间有现车,cara不提供。
如果查询7月16日至7月21日的现车,cara不提供。
为了进一步说明,下面是简化的数据库模式:
表1-项目
表2-项目
表1(项目)
+------+-----------------+--------------+
| id | type | item |
+------+-----------------+--------------+
| 1 | car | carA |
| 2 | car | carB |
| 3 | car | carC |
| 18 | car | carD |
| 4 | reservation | reservationA |
| 5 | reservation | reservationB |
| 6 | reservation | reservationC |
| 7 | reservation | reservationD |
| 8 | reservation | reservationE |
| 9 | reservation | reservationF |
| 10 | reservation | reservationH |
| 11 | reservation | reservationI |
+------+-----------------+--------------+
表2(项目元)
+-----+---------+--------------+---------------------+
| id | rid | key | value |
+-----+---------+--------------+---------------------+
| 1 | 4 | start_time | 2018-07-4 11:51:34 |
| 2 | 4 | end_time | 2018-07-8 11:51:34 |
| 3 | 4 | car_id | 1 |
| 4 | 5 | start_time | 2018-07-9 11:51:34 |
| 5 | 5 | end_time | 2018-07-14 11:51:34 |
| 6 | 5 | car_id | 1 |
| 7 | 6 | start_time | 2018-07-18 11:51:3 |
| 8 | 6 | end_time | 2018-07-20 11:51:34 |
| 9 | 6 | car_id | 1 |
| 10 | 7 | start_time | 2018-07-18 11:51:3 |
| 11 | 7 | end_time | 2018-07-20 11:51:34 |
| 12 | 7 | car_id | 18 |
+-----+---------+--------------+---------------------+
我认为这是一个有趣的挑战,有什么想法应该如何构造查询来服务于这个目的,这是可能的吗?谢谢你的帮助,谢谢。
1条答案
按热度按时间0md85ypi1#
我创建了一个子查询,将items元数据转换为一个表,其中包含car id、reservation id、start time和end time。这在下面的查询中表示为表r。一旦数据采用这种格式,您就可以查询预订数据,以查看您的搜索日期和现有预订之间有何重叠。
下面的查询提供了与给定搜索日期冲突的所有保留的列表。您可以使用此列表来知道要排除哪些车辆,因为它们在搜索日期内已被保留。