层级结构数据之查询~mysqll函数查询

MySQL 服务器版本 5.5.23

1、创建函数getMenuStr,获取所选层级所有子节点id串
DROP FUNCTION IF EXISTS `getMenuTreeStr`;
CREATE FUNCTION `getMenuTreeStr` (`sid` INT)
  RETURNS varchar(1000)  
BEGIN
  DECLARE treeStr VARCHAR(1000);
  DECLARE sTempChd VARCHAR(1000);
  SET treeStr = '$';
  SET sTempChd =cast(sid as CHAR); 
  WHILE sTempChd is not null DO
    SET treeStr = concat(treeStr,',',sTempChd);
    SELECT group_concat(id) INTO sTempChd FROM st_menu where FIND_IN_SET(parentid ,sTempChd)>0;
  END WHILE;
  RETURN treeStr;
END


2、创建函数getMenuLevelno,得到当前节点在所选几点的层数

DROP FUNCTION IF EXISTS `getMenuLevelno`;
CREATE FUNCTION `getMenuLevelno` (`cid` INT, `sid` INT)
  RETURNS INT  
BEGIN
  DECLARE result INT DEFAULT -1;
	  DECLARE ccid INT;
    DECLARE bool INT DEFAULT 1;
	
	IF(cid = sid)
		THEN 
		SET result = 1;
	ELSE
    SET ccid = cid;
    WHILE bool > 0 DO
      SET bool = bool + 1;
      SELECT parentid INTO ccid FROM st_menu WHERE id = ccid;
      IF ccid = sid
        THEN 
				SET result = bool;
				SET bool = 0;
			END IF;
    END WHILE;
	END IF;

	RETURN result;
END

你可能感兴趣的:(mysql)