2011-07-06 28 views
1

假設我們有一個名爲SMALLER的表,其中有num_1num_2這兩個整數類型和其中的一些數據。MySQL存儲過程設計問題。 Recusion還是Hierarchy?

它看起來像這樣:

`num_1` `num_2` 
    1  2 
    2  3 
    2  8 
    3  4 
    4  5 
     . 
     . 
     . Much much much more 
     . 

什麼即時試圖做的是擴大該表,然後收集所有的「小」的關係。 這樣,結果表應該是這樣的:

`num_1` `num_2` 
    1  2 
    1  3 
    1  4 
    1  5 
    1  8 
    2  3 
    2  4 
    2  5 
    2  8 
    3  4 
    3  5 
    4  5 

我感謝所有幫助!此外,如果不是「較小」的關係,該表只是具有「連接」關係,例如,連接到「2」的「1」,連接到「3」的「2」,連接到「2」的連接到'4',這樣我們說1-2,1-3,1-4,2-3,2-4。

回答

0

一個很好的起點是:

SELECT 
    A.num_1, B.num_2 
FROM 
    Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2) 
ORDER BY A.num_1, B.num_2; 

裏面存儲的過程,把這個變成一個光標,遍歷光標和每一行做一個INSERT忽略不計。即:

DECLARE num1,num2 INT; 
DECLARE done DEFAULT 0; 
DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN mycursor; 

my_loop: LOOP 
    FETCH mycursor INTO num1, num2; 
    IF done THEN 
     LEAVE my_loop; 
    END IF; 
    INSERT IGNORE INTO Smaller VALUES (num1,num2); 
END LOOP; 

爲了回答您的更新問題,田地不能完全肯定,如果你的意思是連接通過唯一的行(需要兩列來存儲這種關係,所以這將是非常相似)之間的關係的手段。或者如果你的意思是你有一個包含所有數字的表格,而另外兩列表格包含第一個表格的行之間的關係。或者,最後,如果你想要一個只包含帶有「1-2」,「1-3」等字符串的表格。如果是這樣的話,我會把它保留爲兩個單獨的列,並將它們輸出爲字符串CONCAT當你調查表:)

+0

嗨嗨,非常感謝您的時間和幫助。但是如果不是「較小」的關係,這個表只是有一個「連接」的關係,例如,連接到'2'的'1',連接到'3'的'2',連接到'4'的'2'使我們說1-2,1-3,1-3,2-3,2-4。 – user758360

+0

我不明白你是什麼意思隊友:)你能否更新你的問題,上面應該擴展你的兩個列表,到你在哪裏要求:)也就是說。一個包含所有較小關係的擴展:)你的意思是將它擴展爲兩個表,一個帶有一列「數字」,另一個帶有兩個列,用於定義「數字」表中數字之間的關係?這應該是相當直接實施以及 – JustDanyul

+0

這裏是我的問題,zeeee,版本2. http://stackoverflow.com/questions/6603175/mysql-stored-procedure-design-problem-v2-recusion-or-hierarchy – user758360