如何解决租车-如何检查两个日期之间是否有车?
| 我要在汽车站点租车,并且可以在给定时间段内保留汽车。例如,在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中实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。