【发布时间】:2018-05-31 05:40:32
【问题描述】:
我在 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
在reservation页面我得到一个新的预订日期来分配车辆,该日期将从1527804060开始到1527811320。 (基本上是 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");
}
【问题讨论】:
-
听起来你想要一个
NOT EXISTS子句。这里有一个例子~stackoverflow.com/a/6839529/283366 -
@Phil 让我检查一下。
-
最坏的情况,你总是可以把这个复杂的查询分成两个简单的查询。首先查询所有未分配的视频,然后获取此列表中包含视频的所有车辆。
-
@AdrianBaginski 可以举个例子吗?
-
@AdrianBaginski 如何获取所有未分配的视频?为此,我需要运行某种连接查询,对吗?