我目前正在开发租车系统,并对预订汽车有一些不确定性。如何显示预订车辆的所有日期。
示例
汽车BMV保留于2015年11月11日至2015年12月5日,也将于2005年11月30日至5月30日 2015年12月10日和2015年12月10日至2015年12月25日
如果clint想在这个日期进行新的预订,我将创建ALERT“这个日期是为汽车保留的。”
所有这些都适用于单一预订日期,但我需要多个。
我的cuttent数据库看起来像这样:
预订:
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
答案 0 :(得分:1)
假设这是一整天的预订,那么您可以加入这两张表来获取特定汽车的所有预订日期,例如,如果宝马汽车是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
的列表。
然后,对于格式化par,我不建议您在SQL中以您希望的方式格式化日期。更好的是,在你的后端应用程序中,你可以循环它们并以你想要的方式显示它们。
答案 1 :(得分:0)
继续您的表格结构,您应该能够在Bookings
表中插入一个新行,以显示同一辆车的二级租用期。当通过GROUP BY
车辆ID加入其他表时,这应该有效。
INSERT INTO Bookings
(Secondary Booking Information)
SELECT
car_id,
MAX(CASE WHEN @DESIRED_DATE NOT BETWEEN booking_date AND return_date THEN 'True' ELSE NULL END) AS AvailabilityCheck
FROM Bookings
GROUP BY car_id
答案 2 :(得分:0)
左边加入汽车表,预订以了解他们当前的预订状态,然后按汽车ID分组
select car.id,car.car_type_id,car.registration_number,
coalesce(group_concat('Reserverd from ',concat(Bookings.booking_date,' to ',Bookings.return_date)),'Open for bookings') as Booking_status
from car
left join Bookings on car.id=bookings.car_id
group by car.id
SQL小提琴示例:http://sqlfiddle.com/#!9/c8c76/4
答案 3 :(得分:0)
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);
答案 4 :(得分:0)
如果您想一次选择所有汽车,请尝试group_concat
select t.*,group_concat(concat('from:', t2.booking_date,' to: ',t2.return_date)) reserved_ranges
from cars t
left join bookings t2 on t2.car_id = t.id
group by t.id;