获取所有子节点

 

DROP FUNCTION IF EXISTS `F_Co29_GetAllChildrenIdsOfTaskevent`;
DELIMITER //
CREATE FUNCTION `F_Co29_GetAllChildrenIdsOfTaskevent`(
    vId BIGINT
)
RETURNS VARCHAR(5000)
BEGIN    
    DECLARE sTemp VARCHAR(1000); 
    DECLARE sTempChd VARCHAR(5000); 
    DECLARE vCount INT; 
    SET sTemp = ''; 
    SET sTempChd = CAST(vId AS CHAR); 
    SET vCount = 1000;
    
    WHILE sTempChd IS NOT NULL AND vCount > 0 DO 
        SET vCount = vCount - 1;
        IF LENGTH(sTemp) > 0 THEN        
            SET sTemp = CONCAT(sTemp,',',sTempChd); 
        ELSE
            SET sTemp = sTempChd; 
        END IF;
        SELECT GROUP_CONCAT(`Id`) INTO sTempChd FROM `taskevent` WHERE FIND_IN_SET(`PID`,sTempChd)>0; 
    END WHILE; 
    RETURN sTemp; 

END//
DELIMITER ;

获取所有父级节点

DROP FUNCTION IF EXISTS `F_Co30_GetAllParentIdsOfTaskevent`;
DELIMITER //
CREATE FUNCTION `F_Co30_GetAllParentIdsOfTaskevent`(
    vId BIGINT
)
RETURNS VARCHAR(5000)
BEGIN    
    DECLARE vPId BIGINT;   
    DECLARE sTemp VARCHAR(1000) DEFAULT '';
    
    WHILE vId IS NOT NULL DO 
        SELECT `PID` into PId FROM `taskevent` WHERE `Id` = vId;
        IF vPId IS NOT NULL THEN
            SET sTemp = CONCAT(sTemp, ',', vPId);   
            SET vId = vPId;   
        ELSE
            SET vId = vPId;   
        END IF;   
    END WHILE;
    SET sTemp = SUBSTRING(sTemp,2);
    
    RETURN sTemp; 

END//
DELIMITER ;