我有两个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 |
+---------+-----------+------+---------+
最佳答案
在原始MySQL中,没有简单的方法可以做到这一点.
您可以安装OQGRAPH(这是一个用于存储图形的插件存储引擎),在其中创建图形表并发出如下查询:
SELECT *
FROM oqtable
WHERE latch = 1
AND origid = 1
AND destid = 3
该算法将使用Dijkstra的算法查找1和3之间的最短路径.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。