1. 程式人生 > >Mysql無限遞迴樹(由子找父資料父名稱)

Mysql無限遞迴樹(由子找父資料父名稱)

接到一個需求,就是訂單找找到它的所有推廣關係,把推廣人的名字按層級匯出來,找了好久,mysql沒有支援無限遞迴樹的函式,查了資料轉換為自己要的查詢,瞭解了一次mysql的函式,感覺棒棒噠

DROP FUNCTION IF EXISTS  getParentList;
CREATE FUNCTION `getParentList`(rootId INT)
RETURNS varchar(1000)
BEGIN

#定義變數
DECLARE sParentList varchar(1000);
DECLARE sParentTemp varchar(1000);
DECLARE sParentName varchar(1000);
DECLARE sParentTmpName varchar(1000);
DECLARE sParentTmpMobile varchar(1000);

#將入參強制轉換為字串
SET sParentTemp = cast(rootId as CHAR);

WHILE sParentTemp is not null DO #當條件為不為空的時候執行(找不到上級就可以執行)

SET sParentTmpName = ( SELECT true_name FROM zjj_user.user_profile where user_id = sParentTemp ); #查詢你需要的欄位

IF (sParentList is not null) THEN #判斷只有一層的關係
SET sParentList = concat(sParentTemp,',',sParentList);
SET sParentName = CONCAT(sParentTmpName,',',sParentName); #將你需要輸出的欄位進行拼接
ELSE
SET sParentList = concat(sParentTemp);
SET sParentName = concat(sParentTmpName);
END IF;

SELECT group_concat(p_uid) INTO sParentTemp FROM user_introduce_relation where user_id = sParentTemp; #將變數替換成找到的值

END WHILE;

RETURN sParentName; #返回需要的
END; 

select getParentList(1123);


我的需求查詢到的結果