我有这个问题,我想您可能会帮助我。
PS:我不确定如何称呼它,所以如果有人找到一个更合适的标题,请进行编辑。
背景
- 我正在使用此应用程序搜索公交线路。
- 总线是3位数字,并且是唯一的,永远不会改变。
- 要求是能够搜索从站点A到站点B的线路。
- 用户界面已经成功提示用户仅使用有效的站点名称。
- 要求是能够显示一条路线是否有一条直线,如果没有,则显示2条甚至3条线的组合。
例:
我需要从A点到达D点。该程序应显示:
- 如果有一条直线AD。
- 如果不是,则显示2行组合,例如AC,CD。
- 如果没有任何2行组合,请搜索3行组合:AB,BC,CD。
当然,该应用程序应显示总线线路号以及何时切换总线。
是)我有的:
我的数据库结构如下(简化后,实际的数据库包括位置和时间等信息):
+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+
+-------------------------------+
| lines_stops_relationship |
+-------------+---------+-------+
| bus_line | stop_id | order |
+-------------+---------+-------+
在哪里lines_stops_relationship
描述公交线路和车站之间的多对多关系。
顺序,表示止损单行显示的顺序。并非所有的行都来回移动,并且顺序具有含义(顺序2的A点在顺序1的B点之后)。
问题
- 我们找出一条线是否可以轻松通过该路线。只需搜索一条以正确顺序穿过两个点的直线。
- 如何找到2/3线组合?我当时想搜索一条与源站点相匹配的线,与目标站点相匹配的线,以查看是否可以在它们之间找到一个公共站点,以便用户可以切换公交车。我怎么记得那站?
- 3行组合更加棘手,我找到了一条线作为源,一条线用于目的地,然后呢?我想搜索一条有2个停靠点的线,但是,我又如何记住停靠点?
tl; dr
我如何记住查询结果才能再次使用?我希望在单个查询中实现此目的(对于每个查询,都是针对1行路线的查询,针对2行的查询以及针对3行组合的查询)。
注意:我不介意有人建议使用与我完全不同的方法,我愿意接受任何解决方案。
将通过cookie和upvote奖励任何帮助。提前致谢!
2
en.wikipedia.org/wiki/Dijkstra%27s_algorithm
@eggyal:我在节点之间没有距离。另外,我在网络内部的移动受到限制(即,只有某些总线从A点移动到B点)。还是对我有用吗?
—
马达拉的鬼魂
@Truth最好给你一些东西:mysqltutorial.org/stored-procedures-loop.aspx(循环),mysqltutorial.org/…(案例)-与类似dijkstra算法的东西结合,您应该能够解决您的问题问题。基本上,这就像一个php函数-但是在mysql上
似乎已经在Stack Overflow上 -此链接具有多个解决方案,尽管此时MySQL中还没有。(有几个答案很难概括,链接腐烂可能不是问题,因为如果该站点消失了,这个问题也可能会解决。此外,它还有很多支持)。
—
psr 2012年