2013-01-11 50 views
0

我有這樣的表,SQLFiddle here鹼從該圖像path從這個MySQL表查詢的總路徑距離

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

你在談論通過不同的可能性迭代。雖然你可以在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 
0
SELECT SUM(distance) 
    FROM table1 a 
WHERE a.segment IN ('AB','BC','CD','DE'); 

我希望你可以寫一些代碼來構建IN字符串動態。

-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') 
+0

此解決方案是錯誤的。您可以通過另一個例如A到M輕鬆驗證,在這種情況下,它將嘗試包含所有段,如DE和FG,這些不是路徑的一部分。 –

+0

@VinayPai對不起...我看到我現在出錯了。 –

0

我相當肯定,用簡單的SQL查詢無法做到這一點。如果你的結構總是一棵樹,你需要走從末端節點到根的路徑,否則你需要使用類似Djikstra算法的東西。這兩種解決方案都需要一個SQL不可能實現的迭代過程。您可能可以通過存儲過程來完成,但是您最好在您調用此腳本的腳本中執行此操作。