租车-如何检查两个日期之间是否有车?

问题描述

| 我要在汽车站点租车,并且可以在给定时间段内保留汽车。例如,在
01.01.2011 - 10.01.2011 and 15.01.2011 - 25.01.2011. (dd.mm.yyyy)
之间保留了一辆汽车 所以汽车在ѭ1之间可用 我应该如何保留预订记录?如果我创建名为
\'reservations\'
的表并为
\'carID\' \'startDate\' \'endDate\'
创建列,如何检查两个日期之间汽车是否完全可用?还是应该创建预订表?     

解决方法

我会使用时间戳。我知道MySQL已经建立了DATETIME字段类型,但不是,但是我通常更喜欢使用时间戳。无论如何,这就是我要怎么做
vehicles
桌:
id | name 
---------
1  | Ford Mustang
reservations
桌:
id | vehicle_id | start_time | end_time
----------------------------------------
1  | 1          | 130500040  | 130599304
其中start_time和end_time是UNIX时间戳。 然后,当您想查看某天是否有汽车(根据查询结果更改查询中的vehicle_id)时:
$start_date = strtotime($start_date);
$end_date = strtotime($end_date);
$query =  mysql_query(\"SELECT * FROM `reservations` WHERE `vehicle_id`=1 AND (`start_date`>\".$start_date.\" AND `end_date`<\".$end_date.\") OR (`start_date`<\".$start_date.\" AND `end_date`>\".$end_date.\") OR (`start_date<\".$end_date.\" AND `end_date`>\".$end_date.\") OR (`start_date`<\".$start_date.\" AND `end_date`>\".$start_date.\")\");

if (mysql_num_rows()<1)
{
   echo \"The vehicle is available\";
}
    ,创建两个表格-一个用于保存您的车辆信息,另一个用于保存所有预订(如您在问题中所述)。当您需要检查可用性时,仅查询预订表。 请注意您的客户可能想要超额预订或不按时归还汽车的情况。否则,汽车退回的情况非常恶劣,您需要首先进行维修。还有更多未知的情况,因此IMO您应该在两次预订之间留出至少+/- 1或2天的时间间隔。如果您有一辆以上的同类型汽车,那么您可能不会面临太多问题。     ,这是我发现的另一种方式(通过Mysql填写缺少的日期)。创建3个表:车辆,仅公司预订以及该年的所有可用日期。
reservations:  id,booked,vehicle_ref

insert into reservations values (0,\'2011-01-12\',1);
insert into reservations values (0,\'2011-01-13\',\'2011-01-14\',\'2011-01-20\',\'2011-01-21\',1);

reservations_free: free (just a list of all dates this year...)

insert into reservations_free values
(\'2011-01-10\'),(\'2011-01-11\'),(\'2011-01-12\'),(\'2011-01-13\'),(\'2011-01-14\'),(\'2011-01-15\'),(\'2011-01-16\'),(\'2011-01-17\'),(\'2011-01-18\'),(\'2011-01-19\'),(\'2011-01-20\'),(\'2011-01-21\'),(\'2011-01-22\'),(\'2011-01-23\');
检索1月1日至2月1日之间所有尚未预订的车辆#的日期:
SELECT free
FROM reservations_free
LEFT OUTER JOIN reservations ON (reservations.booked = reservations_free.free AND reservations.vehicle_ref =1)
WHERE booked IS NULL AND
reservations_free.free
BETWEEN \'2011-01-01\'
AND \'2011-02-01\'
ORDER BY free
LIMIT 0,30;
获取列表:
2011-01-10
2011-01-11
2011-01-15
2011-01-16
2011-01-17
2011-01-18
2011-01-19
2011-01-22
2011-01-23
当然,您每年必须维护一次reserves_free表,由于我只是从原始表中弄弄了该sql语句,因此可能需要进一步优化sql语句。 使用mysql DATE字段意味着您可以浏览您的数据,对您来说还是有意义的。 添加和删​​除一天会很麻烦。 它没有按要求提供“在1月15日至19日之间免费”的功能,但是如果没有在稍微复杂一些的sql语句中,那应该可以在PHP中实现。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...