Mysql 遞歸

遞歸查詢:組成樹,及組織結構

CREATE 

DEFINER=`root`@`%` 

FUNCTION `getUserChild`(id INT) RETURNS varchar(4000) CHARSET utf8mb4
BEGIN
DECLARE
 oTemp VARCHAR ( 4000 );
DECLARE
 oTempChild VARCHAR ( 4000 );

SET oTemp = '';

SET oTempChild = CAST(  id AS CHAR );
WHILE
  oTempChild IS NOT NULL DO
  
  SET oTemp = CONCAT( oTemp, ',', oTempChild );
 SELECT
  GROUP_CONCAT( user_id ) INTO oTempChild 
 FROM
   account_info
 WHERE  
  FIND_IN_SET( super_id, oTempChild ) > 0;
 
END WHILE;
RETURN TRIM(LEADING ',' FROM oTemp);

END

 

 

DROP FUNCTION IF EXISTS `getUserChild`;
CREATE FUNCTION `getUserChild`( userId INT ) RETURNS varchar(4000)
 CHARSET utf8 COLLATE utf8_bin
BEGIN
DECLARE
 oTemp VARCHAR ( 4000 );
DECLARE
 oTempChild VARCHAR ( 4000 );

SET oTemp = '';

SET oTempChild = CAST( userId  AS CHAR );
WHILE
  oTempChild IS NOT NULL DO
  
  SET oTemp = CONCAT( oTemp, ',', oTempChild );
 SELECT
  GROUP_CONCAT(  id ) INTO oTempChild 
 FROM
   account
 WHERE  
  FIND_IN_SET( super_id, oTempChild ) > 0;
 
END WHILE;
RETURN oTemp;

END;
SELECT TRIM(LEADING ',' FROM getUserChild(1));
SELECT
* FROM user_info WHERE FIND_IN_SET(id, TRIM(LEADING ',' FROM getUserChild(1)));

 

 

尋找上級:

CREATE 

DEFINER=`root`@`%` 

FUNCTION `getUserSuper`( id INT) RETURNS varchar(4000) CHARSET utf8mb4
BEGIN
DECLARE
 oTemp VARCHAR ( 4000 );
DECLARE
 oTempChild VARCHAR ( 4000 );

SET oTemp = '';

SET oTempChild = CAST( id AS CHAR );
WHILE
  oTempChild IS NOT NULL DO
  
  SET oTemp = CONCAT( oTemp, ',', oTempChild );
 SELECT
  GROUP_CONCAT(  super_id) INTO oTempChild 
 FROM
 account_info
 WHERE  
  FIND_IN_SET( user_id, oTempChild ) > 0;
 
END WHILE;
RETURN TRIM(LEADING ',' FROM oTemp);

END

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章