Mysql无限递归树(由子找父数据父名称)
2016-03-06 12:32
495 查看
接到一个需求,就是订单找找到它的所有推广关系,把推广人的名字按层级导出来,找了好久,mysql没有支持无限递归树的函数,查了资料转换为自己要的查询,了解了一次mysql的函数,感觉棒棒哒
DROP FUNCTION IF EXISTS getParentList;
CREATE FUNCTION `getParentList`(rootId INT)
RETURNS varchar(1000)
BEGIN
#定义变量
DECLARE sParentList varchar(1000);
DECLARE sParentTemp varchar(1000);
DECLARE sParentName varchar(1000);
DECLARE sParentTmpName varchar(1000);
DECLARE sParentTmpMobile varchar(1000);
#将入参强制转换为字符串
SET sParentTemp = cast(rootId as CHAR);
WHILE sParentTemp is not null DO #当条件为不为空的时候执行(找不到上级就可以执行)
SET sParentTmpName = ( SELECT true_name FROM zjj_user.user_profile where user_id = sParentTemp ); #查找你需要的字段
IF (sParentList is not null) THEN #判断只有一层的关系
SET sParentList = concat(sParentTemp,',',sParentList);
SET sParentName = CONCAT(sParentTmpName,',',sParentName); #将你需要输出的字段进行拼接
ELSE
SET sParentList = concat(sParentTemp);
SET sParentName = concat(sParentTmpName);
END IF;
SELECT group_concat(p_uid) INTO sParentTemp FROM user_introduce_relation where user_id = sParentTemp; #将变量替换成找到的值
END WHILE;
RETURN sParentName; #返回需要的
END;
select getParentList(1123);
我的需求查找到的结果
DROP FUNCTION IF EXISTS getParentList;
CREATE FUNCTION `getParentList`(rootId INT)
RETURNS varchar(1000)
BEGIN
#定义变量
DECLARE sParentList varchar(1000);
DECLARE sParentTemp varchar(1000);
DECLARE sParentName varchar(1000);
DECLARE sParentTmpName varchar(1000);
DECLARE sParentTmpMobile varchar(1000);
#将入参强制转换为字符串
SET sParentTemp = cast(rootId as CHAR);
WHILE sParentTemp is not null DO #当条件为不为空的时候执行(找不到上级就可以执行)
SET sParentTmpName = ( SELECT true_name FROM zjj_user.user_profile where user_id = sParentTemp ); #查找你需要的字段
IF (sParentList is not null) THEN #判断只有一层的关系
SET sParentList = concat(sParentTemp,',',sParentList);
SET sParentName = CONCAT(sParentTmpName,',',sParentName); #将你需要输出的字段进行拼接
ELSE
SET sParentList = concat(sParentTemp);
SET sParentName = concat(sParentTmpName);
END IF;
SELECT group_concat(p_uid) INTO sParentTemp FROM user_introduce_relation where user_id = sParentTemp; #将变量替换成找到的值
END WHILE;
RETURN sParentName; #返回需要的
END;
select getParentList(1123);
我的需求查找到的结果
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复