我构建了一个摆渡系统,我有三个表,分别是Ports,Routes和关系的数据透视表(ports_of_route)。Ports表包含order列,该列可以是1-10之间的整数。这就给了我路线上港口的顺序。
现在,我将all ports from ports表放到一个选择框中,当用户选择一个端口时,我应该得到所有可能从所选端口出发的端口(订单号应该高于路由的选定订单号)。但没有具体的路线编号,路线对此不重要。
例如,船舶的航线可以从端口-1(订单: 1,route_id: 2)开始,然后从端口-2(订单: 2,route_id: 2)、端口-3(订单: 3,route_id: 2)、端口-4(订单: 4,route_id: 2)开始。另一艘船可能从港口-3出发(订单: 1,route_id: 3),前往港口-5(订单: 2,route_id: 3)。这些是不同的路线。当用户选择port-3时,我应该得到port-4和port-5。
如果不进行两次查询调用,我就不能理解这一点。我能在一个查询中做到这一点吗?
表(未写入不必要的列):
ports
id title
1 port-1
2 port-2
3 port-3
..路线
id标题
1路由-1
2路由-2
ports_of_route
port_id route_id order
1 1 1
2 1 2
3 1 3
2 2 1
4 2 2
..
```
Output: (port-2 selected)
```
port_id ...
3
4
```发布于 2019-08-10 19:05:19
您可以执行以下操作:
select prnext.*
from ports_of_route pr join
ports_of_route prnext
on prnext.order = pr.order + 1
where pr.port_id;这将使用端口ids并将结果放在单独的行中。如果您需要端口名称,则需要额外的联接:
select prnext.*, pnext.title
from ports_of_route pr
ports_of_route prnext
on prnext.order = pr.order + 1 join
ports p
on pr.port_id = p.id join
ports pnext
on prnext.port_id = pnext.port_id
where p.title = 'port-3';https://stackoverflow.com/questions/57441429
复制相似问题