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

Php 租车-如何检查两个日期之间是否有车?,php,html,mysql,date,Php,Html,Mysql,Date,我正在租一个汽车场地,汽车可以预定一段时间。例如,在2011年1月1日至2011年1月10日和2011年1月15日至2011年1月25日之间预订了一辆汽车。年月日 因此,该车于2011年1月11日至2011年1月14日期间上市 我应该如何保存预订记录?如果我创建一个名为“reservations”的表,并为“carID”“startDate”“endDate”创建列,那么我如何检查两个日期之间的汽车是否完全可用?或者我应该如何创建预订表?创建两个表-一个用于保存您的车辆信息,另一个用于保存您在问

我正在租一个汽车场地,汽车可以预定一段时间。例如,在2011年1月1日至2011年1月10日和2011年1月15日至2011年1月25日之间预订了一辆汽车。年月日

因此,该车于2011年1月11日至2011年1月14日期间上市


我应该如何保存预订记录?如果我创建一个名为“reservations”的表,并为“carID”“startDate”“endDate”创建列,那么我如何检查两个日期之间的汽车是否完全可用?或者我应该如何创建预订表?

创建两个表-一个用于保存您的车辆信息,另一个用于保存您在问题中描述的所有预订。当您需要检查可用性时,仅查询bookings表


注意客户可能希望超额预订或不按时归还车辆的情况。或者车子状况很差,你需要先保养一下。还有很多未知情况,所以在我看来,您应该在预订之间留出至少+/-1或2天的时间间隔。如果一种类型的汽车不止一辆,那么你可能不会面临太多问题。

我会使用时间戳来解决。我知道MySQL内置了DATETIME字段类型等等,但我通常更喜欢使用时间戳。无论如何,我会这样做的

车辆表:

预订表:

其中开始时间和结束时间是UNIX时间戳

然后,当您想查看某辆车是否根据某个日期哪辆车可用而更改查询中的车辆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";
}

这是我找到的另一条路。创建3个表:车辆、仅公司预订和该年的所有可用日期

reservations:  id, booked, vehicle_ref

insert into reservations values (0, '2011-01-12',1);
insert into reservations values (0, '2011-01-13',1);
insert into reservations values (0, '2011-01-14',1);
insert into reservations values (0, '2011-01-20',1);
insert into reservations values (0, '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日期间未预订车辆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
当然,您每年都必须维护reservations\u free表,该sql语句可能需要进一步优化,因为我只是在原来的基础上对其进行了修改

使用mysql日期字段意味着您可以浏览您的数据,作为一个人,它仍然对您有一定意义

添加和删除一天将是轻而易举的事


它没有按照要求在1月15日至19日之间提供免费服务,但如果不是在稍微复杂的sql语句中,这在PHP中应该是可行的。

检查这一点:这看起来像是一个相同的问题,您必须查询cars表,查看carID是否在预订表中,然后设置日期,希望这是有意义的,因为它让我写它感到困惑!如我所见,他使用的是dd.mm.yyy格式,而不是dd/mm/yy格式。因此,他的格式很容易通过php核心函数strotime转换。但通过这种方式,我检查汽车是否在1天内可用。我需要知道这辆车是否在两个日期之间,一段时间内可用。Ben,你如何生成这样漂亮的表格?我总是手工打字,结果缩进完全错了。@Laykes,只是手工打字,然后用“代码标记”我不认为这实际上回答了这个问题,我不这么说,因为我这里也有答案。你还没有回答,我怎么能检查汽车是否完全可用?或者我该如何创建预订表?只需要这个。第二段也不是关于编程,而是关于汽车租赁行业-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