根据子节点查找根节点

面试官给我画个表 让我根据0找100  没见过世面的我一顿胡说八道 

根据子节点查找根节点_第1张图片

回来钻研了下正确的解决办法

参考  https://blog.csdn.net/javadhh/article/details/48622743

关键的点是 

1.while循环(我连mysql能while循环都不知道)

2.把parentid复制给id去找id的parentid 直到返回结果为空  那这个就是根节点了

为什么我得sql里要写两个select  因为最后返回空的时候就捕捉不到了  所以得找返回空之前的

我得函数

CREATE FUNCTION `getParentList`(rootId INT)
    RETURNS varchar(1000)
    BEGIN
      DECLARE sParentTemp varchar(1000);
	  DECLARE sParentTemp1 varchar(1000);
      SET sParentTemp = cast(rootId as CHAR);
      WHILE sParentTemp is not null DO
        SELECT group_concat(parentid) INTO sParentTemp1 FROM user_role where id=sParentTemp;
				IF (sParentTemp1 IS NULL) THEN SET 
					sParentTemp1 = sParentTemp;
					ELSE SET sParentTemp1 = NULL;
				END IF;
				SELECT group_concat(parentid) INTO sParentTemp FROM user_role where id=sParentTemp;
      END WHILE;
      RETURN sParentTemp1;
    END;

 调用sql

select parentid From user_role where parentid=getParentList(0);

运行结果 

根据子节点查找根节点_第2张图片

 

你可能感兴趣的:(mysql)