Mysql 遍历树方法

jerry JQuery 2015年11月18日 收藏
Mysql遍历一个节点下面的所有子节点的方法。
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。
  1. CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst`(`rootId` VARCHAR(100)) RETURNS varchar(2000) CHARSET utf8
    BEGIN
          DECLARE sTemp VARCHAR(1000);
          DECLARE sTempChd VARCHAR(1000);
          SET sTemp = '$';
           SET sTempChd =cast(rootId as CHAR);
          WHILE sTempChd is not null DO
             SET sTemp = concat(sTemp,',',sTempChd);
             SELECT group_concat(id) INTO sTempChd FROM hp_node where FIND_IN_SET(pid,sTempChd)>0;
           END WHILE;
           RETURN sTemp;
       END
Mysql使用方法:
  1. SELECT *
    FROM hp_node
    WHERE FIND_IN_SET( id, getChildLst( 2 ) ) 
ThinkPHP使用方法:
  1. $model = D('Node');
    $list = $model->where('FIND_IN_SET( id, getChildLst('.$startId.'))')->select();