我有这个表,SQLFiddle here基于此图像
CREATE TABLE Table1 (
`id` INT( 11 ),
`Segment` VARCHAR( 5 ),
`Distance` FLOAT( 5, 2 ),
`startX` FLOAT( 5, 2 ),
`startY` FLOAT( 5, 2 ),
`endX` FLOAT( 5, 2 ),
`endY` FLOAT( 5, 2 )
);
INSERT INTO Table1
(`id`, `Segment`, `Distance`, `startX`, `startY`, `endX`, `endY`)
VALUES
(1, 'AB', 14.00, -20.00, -19.00, -34.00, -19.00),
(2, 'BC', 15.56, -9.00, -8.00, -20.00, -19.00),
(3, 'CD', 19.00, 10.00, -8.00, -9.00, -8.00),
(4, 'DE', 21.00, 10.00, -29.00, 10.00, -8.00),
(5, 'EF', 11.31, 18.00, -37.00, 10.00, -29.00),
(6, 'FG', 26.66, 42.00, -37.00, 18.00, -37.00),
(7, 'DH', 43.00, 53.00, -8.00, 10.00, -8.00),
(8, 'HI', 22.63, 69.00, -24.00, 53.00, -8.00),
(9, 'HJ', 13.00, 53.00, 5.00, 53.00, -8.00),
(10, 'JK', 14.14, 63.00, 15.00, 53.00, -5.00),
(11, 'KL', 21.00, 84.00, 15.00, 63.00, 15.00),
(12, 'LM', 14.14, 94.00, 25.00, 84.00, 15.00);
表中的已经给出了每个段的长度,从段的开始xy和结束xy
问题#1,是否可以使用此表中的mysql进行查询,该查询将给出总路径距离,如果我想获得从A点到E点的路径距离将给出总距离AB + BC + CD + DE感谢
答案 0 :(得分:0)
您正在谈论迭代不同的可能性。虽然你可以在MySQL中做到这一点(可能通过某种程序或函数),但通常不会使用SQL来执行任务,通常在应用程序端完成。
如果点数不是很大(你的例子有13个),我只需要构建一个包含所有元组元素的表,然后查询你感兴趣的两个。
CREATE TABLE distances (
point1 VARCHAR(1),
point2 VARCHAR(1),
distance FLOAT(5,2)
);
填写你的起点(你提供的所有1段)然后按照以下方式做点什么:
INSERT INTO distances (point1, point2, distance)
SELECT
p1.point1 as point1,
p2.point2 as point2,
p1.distance + p2.distance as distance
FROM
distances p1
INNER JOIN distances p2
ON p1.point2 = p2.point1
答案 1 :(得分:0)
SELECT SUM(distance)
FROM table1 a
WHERE a.segment IN ('AB','BC','CD','DE');
我希望您可以编写一些代码来动态构建IN字符串。
答案 2 :(得分:0)
我有理由相信,使用简单的SQL查询无法做到这一点。如果你的结构总是一棵树,你需要走从末端节点到根的路径,如果没有,你需要使用类似Djikstra算法的东西。两种解决方案都需要迭代过程,这是SQL无法实现的。您可以使用存储过程来完成它,但是您可能最好在您调用它的脚本中执行此操作。
答案 3 :(得分:-1)
我认为这就是你要找的东西。我正在使用Char操作根据两个输入确定路径的开始和结束。起点的第一个字符和结束点的第二个字符。
SELECT SUM(t.distance) FROM Table1 t
WHERE t.segment >= CONCAT('A',Char(ASCII('A')+1))
AND t.segment <= CONCAT(Char(ASCII('E')-1),'E')