我有两个mysql表:节点和关系
CREATE TABLE `nodes` (
`id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `relations` (
`node_id` int(10) unsigned NOT NULL,
`related_node_id` int(10) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
让我们说节点中有四行:节点1和2共享一个关系,2和3,1和4,4和3
INSERT INTO `relations` VALUES (1, 2);
INSERT INTO `relations` VALUES (2, 3);
INSERT INTO `relations` VALUES (1, 4);
INSERT INTO `relations` VALUES (4, 3);
是否有任何算法来获取相关节点之间的路径?像
+---------+------------------+---------+
| node_id | related_node_id | route |
+---------+------------------+---------+
| 1 | 2 | 1/2 |
| 2 | 3 | 2/3 |
| 1 | 4 | 1/4 |
| 4 | 3 | 4/3 |
| 1 | 3 | 1/2/3 |
| 1 | 3 | 1/4/3 |
+---------+-----------+------+---------+
答案 0 :(得分:2)
在香草MySQL
中,没有简单的方法可以做到。
您可以安装OQGRAPH
(它是用于存储图形的插件存储引擎),在其中创建图表并发出如下查询:
SELECT *
FROM oqtable
WHERE latch = 1
AND origid = 1
AND destid = 3
将使用Dijkstra算法查找1
和3
之间的最短路径。
答案 1 :(得分:1)
我相信你正在寻找the all-pairs shortest paths problem。 SQL似乎不是解决这个问题的正确工具 - 很多连接 - 因此我建议使用与MySQL接口的脚本语言。