我目前正在研究汽车租赁系统,并且对预订汽车有一些不确定性。预订汽车时如何显示所有日期。
示例。
[汽车BMV从2015年11月20日保留到2015年5月12日,也保留了30.11.205至10.12.205和10.12.2015至25.12.2015
如果clint要在该日期进行新的预订,我将创建ALERT“此日期是为汽车保留的。”
所有这些都可以使用一个预订日期,但我需要多个。
我的潜在数据库如下:
Bookings:
id customer_id car_id booking_date return_date time_stamp
------ ----------- ------ ------------ ----------- ----------------
1 2 5 2015-11-04 2015-11-12 15.06.10 20:10
2 3 2 2015-11-02 2015-11-13 15.06.10 20:10
3 1 11 2015-11-05 2015-11-16 15.06.10 20:10
4 4 8 2015-11-10 2015-12-16 15.06.10 20:10
汽车:
id car_type_id branch_id registration_number color date_of_manifacturing base_price_per_day
------ ----------- --------- ------------------- ------- --------------------- --------------------
1 1 1 BG-123-431 White 2010-11-15 30
2 2 1 BG-A32-212 Metalic 2015-11-04 30
3 3 2 PA-332-421 Metalic 2008-05-03 35
4 4 1 SM-312-542 Black 2014-06-01 35
5 5 1 BG-4393-54 Black 2012-05-03 50
6 6 1 NS-423-64 White 2010-10-08 50
假设这是一整天的预订,那么您可以将两个表合并以获取特定汽车的所有预订日期,例如,如果宝马汽车是car_id 5,则此查询:]
SELECT c.*, b.booking_date, b.return_date FROM Car AS c INNER JOIN Bookings AS b ON c.id = b.car_id WHERE c.id = 5;
将为您提供该车的
booking_date
和return_date
列表。
然后,对于格式化参数,我不建议您以所需的SQL格式格式化日期。更好的是,在您的后端应用程序中,您可以循环播放它们并以所需方式显示它们。
继续您的表结构,您应该能够在Bookings
表中插入新行,以显示同一辆车的二次租用期。当通过GROUP BY
车辆ID连接到其他表时,此方法应该起作用。
与预订一起加入车桌以了解其当前预订状态,然后按车号将其分组
SELECT aa.car_type_id, aa.registration_number, bb.car_id,
CONCAT(DAYOFMONTH(bb.booking_date),'.',MONTH(bb.booking_date),'-',YEAR(bb.booking_date)) AS from_date,
CONCAT(MONTH(bb.return_date),'.',DAYOFMONTH(bb.return_date),'-',YEAR(bb.return_date)) AS to_date
FROM Car AS aa
INNER JOIN Bookings AS bb
ON aa.id = bb.car_id
WHERE aa.id = 1 AND 'your_date' NOT BETWEEN (bb.booking_date AND bb.return_date);
如果要一次选择所有汽车,请尝试group_concat