遞歸查詢:組成樹,及組織結構
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