存储并显示多个日期范围值SQL

问题描述 投票:1回答:5

我目前正在研究汽车租赁系统,并且对预订汽车有一些不确定性。预订汽车时如何显示所有日期。

示例。

[汽车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
mysql sql database database-design
5个回答
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_datereturn_date列表。

然后,对于格式化参数,我不建议您以所需的SQL格式格式化日期。更好的是,在您的后端应用程序中,您可以循环播放它们并以所需方式显示它们。


0
投票

继续您的表结构,您应该能够在Bookings表中插入新行,以显示同一辆车的二次租用期。当通过GROUP BY车辆ID连接到其他表时,此方法应该起作用。


0
投票

与预订一起加入车桌以了解其当前预订状态,然后按车号将其分组


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);

0
投票

如果要一次选择所有汽车,请尝试group_concat

© www.soinside.com 2019 - 2024. All rights reserved.