Mysql 查询以查找最佳公交换乘路线以及站点列表

Mysql 查询以查找最佳公交换乘路线以及站点列表,mysql,Mysql,我有一个名为route_detail的表,其中route_ID、route_NO、STOP_ID、STOP_POSITION作为列。我有多条路线,该表存储了每条路线的详细信息 routeNo StopID StopPosition ----------------------------- 1 1256 1 1 1245 2 1 1255 3 1 1236 4 1 1654

我有一个名为route_detail的表,其中route_ID、route_NO、STOP_ID、STOP_POSITION作为列。我有多条路线,该表存储了每条路线的详细信息

routeNo StopID  StopPosition
-----------------------------
1       1256       1
1       1245       2
1       1255       3
1       1236       4
1       1654       5
1       1655       6
2       676        1
2       1236       2
2       678        3
2       679        4
3       765        1
3       766        2
3       768        3
3       1236       4
3       1278       5
3       1290       6
我想要的是,当起始站和目的站ID不同时(即不在同一路线上),我的查询应该能够检索源路线No、交换站ID和目的地路线编号

例如,如果源站点ID=1256,用户希望前往目标站点ID=679,则输出应为

routeNo StopID  StopPosition
-----------------------------
1       1256       1
1       1245       2
1       1255       3
1       1236       4
2       1236       2
2       678        3
2       679        4
我对查询和连接完全陌生,因此不知道如何进行查询来检索这种结果集。 我正在使用mysql 5.7和workbench


提前感谢您的帮助。

欢迎使用SO。您的问题或多或少都很清楚,问得也很好。不过,最好展示一下您在SQL中已经尝试过的内容。我也不清楚:“我想要的是起点和终点站ID不同(不在同一路线上…”,从这里开始是什么?你没有开始列,所以很混乱。我认为你想要的是可能实现的,但最终的查询将非常长且复杂,因此你应该向我们提供一个表和数据的列表,以便我们可以使用它->我们需要
创建表
插入
语句定义“最佳”-尽管我ould注意到RDBMS并没有针对这类问题进行优化。很抱歉使用像best这样含糊不清的词。我正在寻找一种方法,通过交换来识别源和目标的所有可能的routeNo组合。所以我可以说2个结果。一个是routeNo1和RouteNo3的组合,中间总共有10个站点,另外一个结果是routeNo1和RouteNo2之间有8个公交站点。感谢Thomas对sqlfiddle的建议,这里是到fiddle的链接。为了更好地解释我的查询,Start和Destinatoin是一个人可以从哪里上车的站点ID。例如,一个人可以从站点ID 2和他的目的地上车假设站点ID为1578。所以我的流程是这样的:1)在站点ID=1的地方查找所有路径,2)在站点ID=1578的地方查找所有路径,如果起点和终点站点ID不属于同一路径,请确定两条路径之间的公共站点ID,我们可以通过它进行路由。欢迎使用So。你的问题或多或少都很清楚,问得也很好。不过,最好展示您在SQL中已经尝试过的内容。这对我来说也不清楚:“我想要的是起点和终点站ID不同(不在同一路线上…”,从这里开始是什么?你没有开始列,所以很混乱。我认为你想要的是可能实现的,但最终的查询将非常长且复杂,因此你应该向我们提供一个表和数据的列表,以便我们可以使用它->我们需要
创建表
插入
语句定义“最佳”-尽管我ould注意到RDBMS并没有针对这类问题进行优化。很抱歉使用像best这样含糊不清的词。我正在寻找一种方法,通过交换来识别源和目标的所有可能的routeNo组合。所以我可以说2个结果。一个是routeNo1和RouteNo3的组合,中间总共有10个站点,另外一个结果是routeNo1和RouteNo2之间有8个公交站点。感谢Thomas对sqlfiddle的建议,这里是到fiddle的链接。为了更好地解释我的查询,Start和Destinatoin是一个人可以从哪里上车的站点ID。例如,一个人可以从站点ID 2和他的目的地上车我的流程是这样的:1)在STOP\u ID=1的地方查找所有路线,2)在STOP\u ID=1578的地方查找所有路线,如果起点和终点STOP\u ID不属于同一条路线,那么确定两条路线之间的公共STOP\u ID,我们可以通过它进行路由。