假设我有一张hotel_rooms的表,每个房间都有一些相关的预订记录。如下所示:
hotel_rooms:
hotel_room_id | hotel_name -------------------------- 1 | Hotel A 2 | Hotel B 3 | Hotel C
reservations:
reservation_id | hotel_room_id | start_date | end_date ------------------------------------------------------------ 1 | 1 | 2011年6月1日 | 2011年6月10日 2 | 1 | 2011年6月20日 | 2011年6月30日 3 | 2 | 2011年6月11日 | 2011年6月15日 4 | 3 | 2011年6月1日 | 2011年6月4日
那么我该如何找到所有的hotel_rooms,在入住日期和离店日期没有与任何hotel_rooms的预订重叠的情况下呢?例如,如果入住日期是2011年6月4日,退房日期是2011年6月8日,那么只会显示Hotel B,而不会显示Hotel A和Hotel C。如果入住日期是2011年6月16日,退房日期是2011年6月19日,则三个酒店都会显示出来。
虽然有多种方法可以解决这个问题,但对于我们的情况,假设hotel_rooms中有很多记录,每个房间都与许多预订记录相关联。 那么怎样才能高效地处理这个搜索呢?对于我的目的,我使用MySQL和PHP(但我不一定需要针对任何一个解决方案)。
hotel_rooms:
hotel_room_id | hotel_name -------------------------- 1 | Hotel A 2 | Hotel B 3 | Hotel C
reservations:
reservation_id | hotel_room_id | start_date | end_date ------------------------------------------------------------ 1 | 1 | 2011年6月1日 | 2011年6月10日 2 | 1 | 2011年6月20日 | 2011年6月30日 3 | 2 | 2011年6月11日 | 2011年6月15日 4 | 3 | 2011年6月1日 | 2011年6月4日
那么我该如何找到所有的hotel_rooms,在入住日期和离店日期没有与任何hotel_rooms的预订重叠的情况下呢?例如,如果入住日期是2011年6月4日,退房日期是2011年6月8日,那么只会显示Hotel B,而不会显示Hotel A和Hotel C。如果入住日期是2011年6月16日,退房日期是2011年6月19日,则三个酒店都会显示出来。
虽然有多种方法可以解决这个问题,但对于我们的情况,假设hotel_rooms中有很多记录,每个房间都与许多预订记录相关联。 那么怎样才能高效地处理这个搜索呢?对于我的目的,我使用MySQL和PHP(但我不一定需要针对任何一个解决方案)。