Php 列出给定日期的所有可用汽车
大家好,我正在尝试显示给定日期内所有可用汽车的列表,我尝试在Php 列出给定日期的所有可用汽车,php,mysql,sql,database,Php,Mysql,Sql,Database,大家好,我正在尝试显示给定日期内所有可用汽车的列表,我尝试在之间使用,但未成功。 在car表中添加另一个字段(status)并查询status是否是一个好主意。有好的方法吗?还是在返回日期和返回日期之间使用预订日期来显示更好 预订: id customer_id car_id booking_date return_date time_stamp ------ ----------- ------ ------------ ----------- ----
之间使用,但未成功。
在car表中添加另一个字段(status)并查询status是否是一个好主意。有好的方法吗?还是在返回日期和返回日期之间使用预订日期来显示更好
预订:
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
5 0 0 0000-00-00 0000-00-00 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 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
id car_type_id branch_id registration_number color date_of_manifacturing base_price_per_day
------ ----------- --------- ------------------- ------- --------------------- --------------------
1 1 1 BG-123-431 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
目录类型:
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
5 0 0 0000-00-00 0000-00-00 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 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
id car_type_id branch_id registration_number color date_of_manifacturing base_price_per_day
------ ----------- --------- ------------------- ------- --------------------- --------------------
1 1 1 BG-123-431 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
汽车:
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
5 0 0 0000-00-00 0000-00-00 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 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
id car_type_id branch_id registration_number color date_of_manifacturing base_price_per_day
------ ----------- --------- ------------------- ------- --------------------- --------------------
1 1 1 BG-123-431 Bela 2010-11-15 30
2 2 1 BG-A32-212 Metalik 2015-11-04 30
3 3 2 PA-332-421 Metalik 2008-05-03 35
4 4 1 SM-312-542 Crna 2014-06-01 35
5 5 1 BG-4393-54 Crna 2012-05-03 50
6 6 1 NS-423-64 Bela 2010-10-08 50
我的所有预订如下所示:
SELECT BOOKING.BOOKING_NUMBER, BOOKING.BOOKING_DATE,
BOOKING.RETURN_DATE, AGENCY.NAME, CAR.REGISTRATION_NUMBER,
CAR_TYPE.NAME
FROM BOOKING
JOIN AGENCY ON BOOKING.AGENCY_ID = AGENCY.ID
JOIN CAR ON CAR.ID = BOOKING.CAR_ID
JOIN CAR_TYPE ON CAR_TYPE.ID = CAR.CAR_TYPE_ID
但对于所有可用的车辆,我都不知道。
有什么例子吗?使用您的预订表,您可以知道哪辆车在一天内预订@checkDate
SELECT *
FROM BOOKING
WHERE @checkDate BETWEEN booking_date AND return_date
因此,要在该日期获得可用汽车,您可以使用:
SELECT *
FROM Cars
WHERE car_id not in (
SELECT car_id
FROM BOOKING
WHERE @checkDate BETWEEN booking_date AND return_date
)
或者在您的完整查询中
SELECT
BOOKING.BOOKING_NUMBER, BOOKING.BOOKING_DATE,
BOOKING.RETURN_DATE, AGENCY.NAME,
CAR.REGISTRATION_NUMBER, CAR_TYPE.NAME
FROM BOOKING
JOIN AGENCY ON BOOKING.AGENCY_ID = AGENCY.ID
JOIN CAR ON CAR.ID = BOOKING.CAR_ID
JOIN CAR_TYPE ON CAR_TYPE.ID = CAR.CAR_TYPE_ID
WHERE
CAR.car_id not in (
SELECT car_id
FROM BOOKING
WHERE @checkDate BETWEEN booking_date AND return_date
)
您可以使用左联接
:
SELECT
CAR.REGISTRATION_NUMBER,
CAR_TYPE.NAME,
AGENCY.NAME,
CASE
WHEN BOOKING.CAR_ID IS NULL THEN 'Not Booked'
ELSE 'Booked'
END AS Status,
BOOKING.BOOKING_NUMBER,
BOOKING.BOOKING_DATE,
BOOKING.RETURN_DATE
FROM CAR
INNER JOIN CAR_TYPE ON CAR_TYPE.ID = CAR.CAR_TYPE_ID
LEFT JOIN BOOKING ON CAR.ID = BOOKING.CAR_ID
LEFT JOIN AGENCY ON BOOKING.AGENCY_ID = AGENCY.ID;
这将为您提供所有可用的汽车,如果任何汽车没有预订,它将带有预订和代理的NULL
值,Status
列将显示它是否预订。我认为对于较大的数据量not IN
是否较慢?请不要使用不存在
我只是给你一个最安全的解决方案。您也可以尝试在预订日期和返回日期之间的@checkDate左侧加入预订,但因为我没有数据,所以不想猜测。这样,您将获得未预订的NULL
,如果您有预订日期和返回日期的索引,我认为可以正常工作。另一种解决方案是使用EXISTS
,但只有通过使用数据进行测试,您才能知道什么是更好的