如何在MYSQL中编写“命令的最短路径”或至少“查找路径”的命令?

时间:2018-10-14 17:42:01

标签: mysql sql

想象,像这样的表中有社交媒体数据:

u1 u2
0  3
1  2
1  4
2  3
3  1
3  4

这意味着:

  • 用户0跟随用户3
  • 用户1跟随用户2
  • 用户1跟随用户4
  • ...

现在我想知道:从用户0到用户2的方式/路径吗?

是的。用户0跟随用户3。用户3跟随用户1。用户1跟随用户2。

但是如何作为SQL命令解决此问题?

我想知道是否存在这样的路径。可选我想知道路径是什么。是否有可能以某种方式获得最短路径?

1 个答案:

答案 0 :(得分:1)

下面的查询在MySQL 8.x中有效,因为它需要“递归公用表表达式”(递归CTE):

with n (initial, path, current) as (
  select u1, concat('', u1, '/', u2), u2  from my_table 
    where u1 = 0 -- initial node
  union all 
  select n.initial, concat(n.path, '/', m.u2), m.u2
    from my_table m
    join n on n.current = m.u1
)
select * from n 
  where current = 2 -- target node

但是,如果您使用的是MySQL 5.x,那么您就不走运了(据我所知)。