我创建了一个非常大的数据库和一个漂亮且有效的应用程序
一切都按要求/需要工作
现在我想从数据库中的表中选择一些项目,将它们放入我在我的应用程序中实现的自定义回收站视图中。
所以我的问题是:
让这张地图的东西
表格如下:
如何使用表格并使用输入 2 和来获得以下结果E 。
2 - > C - > D - > 电子
通常,可以使用select Name from table where line=1
之类的查询来选择整行
EDIT1 -
您可以在SQLFiddle.com
EDIT2 - 正如评论中所述,我不是在寻找最短的路径,而是寻找一条不会出现过多次的路径。您可以将此理解为地铁路线示例,其中您想知道从A站到B站的路线 路线的长度是我稍后会弄清楚的,但现在我想要一个想法(查询)来得到我想要的东西。如果您可以建议实现两者的方法,那么也将受到赞赏。
答案 0 :(得分:1)
我不确定您的数据库结构是否可维护,在我看来,在某个地方中间添加一个电台将是一场噩梦。 “可以从”信息中获取信息不应该在索引中... ...
我依赖你的断言“我不是在寻找最短的路径。”,我认为这也意味着效率通常不那么重要(否则在SQL之上使用编程语言来实现推荐的算法之一在评论中)。即我做了一个鲁莽的暴力概念。
所以这是一个提案 (请注意,这是SQLite,但我怀疑MySQL无法执行任何SQLite查询 并且不喜欢小提琴,我有麻烦接受我正在使用的递归构造的小提琴......):
with reachable(fromname, toname)
as (
select a.name, b.name
from table1 a INNER JOIN table1 b
on a.id+1 = b.id and a.color = b.color
UNION ALL
select a.name, b.name
from table1 a INNER JOIN table1 b
on a.id = b.id+1 and a.color = b.color
),
distance (name, dist, path)
as (
select 'E', 0, 'E'
UNION ALL
select a.fromname, b.dist+1, a.fromname||'->'||b.path
from reachable a INNER JOIN distance b
on a.toname = b.name and instr(b.path, a.fromname) =0
)
select path from distance where name = '2';
详细说明:
with reachable ...
with distance ...
a.fromname||'->'||b.path
instr(b.path, a.fromname) =0
where name = '2'
select 'E', 0, 'E'
,0是固定的输出:
2->C->D->E
试验:
2->C->D->E
4->C->D->E
4->C->B
2->C->B
使用:SQLite 3.18.0 2017-03-28