Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 检查重叠的汽车预订_Database_Date_Calendar - Fatal编程技术网

Database 检查重叠的汽车预订

Database 检查重叠的汽车预订,database,date,calendar,Database,Date,Calendar,我正在为租车(学校作业)编写一个简单的预订程序。我和我的伙伴正在努力使系统比任务要求的更先进一点,但是我们遇到了一些问题,我们希望你能帮助我们解决 我们的想法是,你可以预订某种类型的汽车,当你拿到汽车时,它将是那种类型的汽车(按照我们的任务规定,你不预订特定的汽车,而只预订一种类型的汽车)。只有一位客户可以在特定日期拥有该车。随着预订量的增加,我们必须确保每种类型的汽车出租量不会超过现有数量。预订基本上是以开始日期、结束日期和车辆类型存储的 如果我们现在忽略汽车类型(假设我们只有一种类型),那么

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

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

如果我们现在忽略汽车类型(假设我们只有一种类型),那么预订可能会以图形形式显示如下:

1/12  2/12  3/12  4/12  5/12  6/12  7/12
|-------------------|
                    |-----------------|
                                |-----|
|-------|
                          |-----------|
|-------------|
如果租车公司只有三辆车,那么可以在2012年3月至2012年5月期间租车,因为所有日子只有两辆车的预订。但是我们怎么知道呢?我们是否必须检查每个日期并计算该日期内的预订数量

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


我们是否有可能通过询问来了解情况,或者我们是否需要逐项检查程序中的每个日期,以检查预订数量是否超过汽车数量? (这是很容易的,只有完整的日期,但考虑的情况下,你可以租每小时的汽车(不仅在每天像这里),那么它可以是一个通过每个我们,如果我们有很多预订和汽车,时间很长……)/P> 希望你有一些好主意能帮助我们。感谢您抽出时间阅读问题:)

  • 丹麦米克尔
“我们是否可以通过查询了解一些情况,或者我们是否必须逐项检查程序中的每个日期,以检查预订数量是否超过车辆数量?(这很简单,只有完整的日期,”

问题的本质是,违反约束的情况可能会出现在任何单独的日期。因此,从逻辑上讲,确实有必要对新预订中包含的每个单独日期进行检查。唯一可能的优化是在“最小间隔”级别进行检查。为此,您必须首先计算数据库中已出现的所有间隔,这些间隔与您的新预订重叠

例如,4/12-6/12的新预订必须分为4/12-5/12(第二行)和5/12-6/12(第三行)。这些单独的间隔可能超过一天,您可以对这些单独间隔的级别进行检查。(在这个特定示例中,它们与单独的天数相同,但7/12-19/12预订根本不需要拆分


然而,计算这可能会很困难,还有一个警告:当您查看所有多行插入时,您还应该拆分要插入的其他行(这要求您将所有插入的行记录在临时表中,否则您将无法访问它们).

假设您在现实生活中有这样的保留情况:

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

| 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-05
2013-12-06

“选择所有没有任何日期预订的车辆,这将阻止其使用” 使用brillian mysql选择:

从不存在的车辆中选择*(从预订中选择*)
其中car.id=reservation.car\u id和
日期<'2013-12-06'和
日期(至>'2013-12-05')

可能的重复比简单地确定两个日期范围是否重叠要复杂得多。