database - 检查重叠的汽车预订

标签 database date calendar

我正在编写一个简单的汽车租赁预订程序(一项学校作业)。我和我的伙伴正在努力使系统比任务规定的更先进一些,但我们遇到了一些问题,希望您能帮助我们解决。

我们的想法是,您可以预订某种类型的汽车,当您拿到汽车时,它将是该类型的汽车(您不预订特定的汽车,正如我们的任务所要求的那样,而只是一种类型)。只有一位客户可以在特定日期取车。随着预订的到来,我们必须确保,我们租出的每种类型的汽车不会超过我们拥有的数量。预订基本上存储有开始日期、结束日期和汽车类型。

如果我们暂时忽略汽车类型(假设我们只有一种类型),那么预订可能看起来像这样:

1/12  2/12  3/12  4/12  5/12  6/12  7/12
|-------------------|
                    |-----------------|
                                |-----|
|-------|
                          |-----------|
|-------------|

如果租赁只有三辆车,则可以在 3 月 12 日至 5 月 12 日租一辆车,因为所有天只有 2 辆车预订。但是我们怎么知道呢?我们是否必须检查每个日期和 count() 跨越该日期的预订数量?

如果有人在 4 月 12 日预订了一辆车,那么 3 月 12 日和 5 月 12 日仍然只有 2 个预订,但 4 月 12 日会有 3 个。

是否可以通过某种方式进行查询,或者我们是否必须遍历程序中的每个日期以检查预订数量是否超过汽车数量? (这很容易,只有完整的日期,但考虑一下您可以按小时租用汽车的情况(不仅仅是在这里每天)。如果我们有很多预订和汽车,时间跨度很长...)

希望您有一些不错的想法可以帮助我们。感谢您花时间阅读问题:)

  • 丹麦米克尔

最佳答案

假设,你在现实生活中有这样的预约情况:

       1/12  2/12  3/12  4/12  5/12  6/12  7/12
Car1:  |-------------------|
Car2:                      |-----------------|
Car3:  |-------|     |-----------|     |-----|                              
Car4:  |-------------|

table 汽车

| id | type | registration |
| 1  | 1    | HH1111       |
| 2  | 1    | HH3333       |
| 3  | 2    | HH77         |
| 4  | 3    | DD999        |

预订

| car_id | date_from  | date_to    |
| 1      | 2013-12-01 | 2013-12-04 |
| 2      | 2013-12-04 | 2013-12-07 |
| 3      | 2013-12-01 | 2013-12-02 |
| 3      | 2013-12-03 | 2013-12-05 |
| 3      | 2013-12-06 | 2013-12-07 |
| 4      | 2013-12-01 | 2013-12-03 |

现在,您必须通过非常简单的逻辑,选择一段时间内所有可用的汽车

2013-12-052013-12-06

“选择所有没有预订日期的汽车,这将阻止它使用” 使用 brillian mysql 选择:

select * from car  where not exists ( select * from reservation 
where car.id = reservation.car_id AND
date_from < '2013-12-06' AND
date_to > '2013-12-05' )  

关于database - 检查重叠的汽车预订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293727/

相关文章:

java - 为什么我使用 SimpleDateFormat 来格式化表示时间戳的字符串时遇到这种奇怪的行为?

sql - Oracle:避免 to_date 中出现 NULL 值

objective-c - 使用 Cocoa 确定两个日期之间的月数

java - 将日历java中的月份字符生成到变量中

database - Oracle 10g 上 NUMBER 列的索引

mysql - 跟踪如何获取 BOM 及其子 BOM( Material list )的过程

sql - 使用spark sql进行分类

php - MySQL中的字符集;不能插入特殊字符,为什么?

mysql - timediff() 从 mysql 选择

ios - 将 UIViewController 中的文本附加到内置的 iphone 日历