使用SQL查找节点之间的路径

前端之家收集整理的这篇文章主要介绍了使用SQL查找节点之间的路径 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有两个mysql表:节点和关系

  1. CREATE TABLE `nodes` (
  2. `id` int(10) unsigned NOT NULL auto_increment,PRIMARY KEY (`id`)
  3. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  4. CREATE TABLE `relations` (
  5. `node_id` int(10) unsigned NOT NULL,`related_node_id` int(10) unsigned NOT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

假设节点中有四行:节点1和2共享一个关系,节点2和3,1和4,4和3

  1. INSERT INTO `relations` VALUES (1,2);
  2. INSERT INTO `relations` VALUES (2,3);
  3. INSERT INTO `relations` VALUES (1,4);
  4. INSERT INTO `relations` VALUES (4,3);

是否有任何算法可以获取相关节点之间的路径?喜欢

  1. +---------+------------------+---------+
  2. | node_id | related_node_id | route |
  3. +---------+------------------+---------+
  4. | 1 | 2 | 1/2 |
  5. | 2 | 3 | 2/3 |
  6. | 1 | 4 | 1/4 |
  7. | 4 | 3 | 4/3 |
  8. | 1 | 3 | 1/2/3 |
  9. | 1 | 3 | 1/4/3 |
  10. +---------+-----------+------+---------+
最佳答案
在原始MysqL中,没有简单的方法可以做到这一点.

您可以安装OQGRAPH(这是一个用于存储图形的插件存储引擎),在其中创建图形表并发出如下查询

  1. SELECT *
  2. FROM oqtable
  3. WHERE latch = 1
  4. AND origid = 1
  5. AND destid = 3

该算法将使用Dijkstra的算法查找1和3之间的最短路径.

猜你在找的MySQL相关文章