我有两个表,第一个是汽车,第二个是预订,我的搜索字段是
- 位置
- 类型
- 选择日期时间
- 投递日期时间
所以请让我知道如何获得在日期和时间之间没有预订的可用汽车。如果预订了汽车,那么它就不应该在列表中。该列表应该只有搜索可用的汽车。
汽车表
----------------------------------------------
id | name | type | location | pincode
----------------------------------------------
1 A plain delhi 110093
2 B plain deldi 110093
3 C plain deldi 110093
4 D plain deldi 110093
5 E plain deldi 110093
预订表
id | car_id | user_id | pick_date | drop_date
-----------------------------------------------------------------------------
1 1 1 2016-05-10 13:00:00 2016-05-12 16:00:00
2 1 1 2016-05-12 18:00:00 2016-05-12 23:00:00
在your_startdate和your_enbdate中,您应该插入您的日期范围
Select cars.*
from cars
Left join booking on cars.id=booking.id and pick_date between your_startdate and your_enddate
Where booking.id is null
使用此查询。。。
从预订中查找在给定日期预订的汽车id,然后从汽车表中查找id不等于预订汽车的所有汽车。。
SELECT * FROM cars WHERE id NOT IN (SELECT car_id FROM booking
WHERE pick_date >= '2015-06-03'
AND drop_date <= '2015-06-05'
);
根据您的搜索变量,首先从Booking表中的pick-datetime和drop-datetime之间选择car_id
。
现在您有一个在该日期和时间之间预订的car_id
的列表。
使用循环并从cars表中进行选择查询,其中id != car_id
和位置和类型将作为搜索变量。
在查询之间使用,知道预订了哪辆车,还知道没有预订的具体时间。
given_time_here_search_time="2016-05-11 15:00:00"//用户输入
查询应该类似于这个
SELECT * FROM cars
WHERE id NOT IN (SELECT car_id
FROM booking
WHERE given_time_here_search_time
between pick_date
AND drop_date ) and location='delhi' and type='plain';