我有一個表的數據庫看起來有點像這樣:Mysql的鏈選擇查詢
Root | Connector
A | B
B | C
C | D
D | E
E | -
所以我想取回鏈對於任何給定根,直到連接器是空白
例如: A的鏈意味着A-> B-> C-> D-> E而C的鏈意味着C-> D-> E
我正在使用mysql數據庫。
在此先感謝
我有一個表的數據庫看起來有點像這樣:Mysql的鏈選擇查詢
Root | Connector
A | B
B | C
C | D
D | E
E | -
所以我想取回鏈對於任何給定根,直到連接器是空白
例如: A的鏈意味着A-> B-> C-> D-> E而C的鏈意味着C-> D-> E
我正在使用mysql數據庫。
在此先感謝
我只是嘗試在Mysql中的循環結構,並取得成功。發佈僅供分享 -
CREATE PROCEDURE `root_connect`(IN init char(1),OUT str char(15))
BEGIN
set @startChar:=(select connector from tableName where root = init);
set @endloop := "no";
set @fullchar:= @startChar;
set @newchar:= "";
if (@startChar !="-" OR @startChar =null) then
WHILE (@endloop = "no") DO
set @newchar :=(select connector from tableName where root = @startChar);
if(@newchar = '-') THEN
set @endloop := "yes";
else
set @fullchar:= concat(@fullchar,"-",@newchar);
end if;
set @startChar := @newchar;
END WHILE;
end if;
select @fullchar;
END
因爲MySQL不允許用戶創建一個遞歸函數,讓我告訴你使用存儲過程:
假設你正在使用的表被命名爲「測試」。
DELIMITER $$
DROP PROCEDURE IF EXISTS build_chain$$
CREATE PROCEDURE build_chain(init CHAR(1))
BEGIN
IF init != '-' THEN
SET @r := (SELECT DISTINCT(root) FROM test WHERE root = init);
SET @search_type := TRUE;
SET @result := @r;
END IF;
SET @r := (SELECT DISTINCT(connector) FROM test WHERE root = @r AND connector != '-');
SET @result = CONCAT_WS('->', @result, @r);
SET @search_type = IF(@search_type, FALSE, TRUE);
IF @r IS NOT NULL THEN CALL build_chain('-'); ELSE SELECT @result AS result_chain; END IF;
END$$
DELIMITER ;
用法:
SET max_sp_recursion_depth = 255;
CALL build_chain('a');
結果(鏈)被存儲在變量@result。
注意:您還可以使用MySQL以外的編程語言構建鏈。
嗨胡斯尼......我確實創建了這個存儲過程,但我無法執行這些命令: SET max_sp_recursion_depth = 255; CALL build_chain('a'); –
工作就像一個魅力...謝謝:) –
您使用的是哪種編程語言? –