我在MySQL数据库中有4个表:
1)供应商(用于保存所有供应商)
2)车辆(用于获取所有车辆)
3)分配(用于预订车辆进行特定预订)
4)预订(用于保存所有新预订)
车辆表结构:
vid vehicleName sid
==========================
13 xx 28
14 xx 28
15 xx 28
16 xx 29
17 xx 29
18 xx 30
分配的表格结构:
asgid bid sid vid did assigned_start assigned_end
===============================================================
42 15 28 15 16 1527804060 1527811320
43 15 28 14 15 1527804060 1527811320
在预订页面中,我将获得指定车辆的新预订日期,该日期将从 1527804060 开始,并结束 1527811320 < / strong>即可。 (它基本上是06/01/2018 02:01到04:02)
现在在这个预订页面上,我可以显示供应商和车辆表中的所有供应商名称及其车辆名称(请参阅我的下面的查询)。这很好。
但我想展示在assigned_start
和assinged_end
日期之间已经预订不的车辆。
例如:您可以看到vid
15和14已经分配到相同旧的和新的预订日期。现在,查询应该只显示13,16,17,18没有车辆。 不,15和14,因为它们是在日期之间预订的
显示所有具有相应供应商名称的车辆的当前查询:
foreach ($sid as $key => $value) {
$vehicle->rowQuery("SELECT s.supplierName, v.vid, vehicleName, v.noOfSeat, v.seatBooked, v.type
FROM vehicle AS v
LEFT JOIN supplier AS s ON v.sid = s.sid
RIGHT JOIN driver AS d ON d.vid = v.vid
WHERE v.sid = $value
ORDER BY v.vid DESC");
}
答案 0 :(得分:1)
尝试以下方法:
select * from vehicle where vid not in (
select vid from assigned where assigned_end < now() or assigned_start > now()
)