表结构
表名: tb_game_area
关系字段: id , parentId, areaName
业务关系
根据已有的子类id ,查询出所在的哪个父类区域下
结果显示
分析
使用while 循环查询, 根据i是否为1 , 默认查询出当前id 的区名
存在: 赋值给str , 不存在: 修改i=0 ,终止循环 (这里为数据好看,截取了str的最后一个字符);
注意点: CONCAT (返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。)
-- 贴出mysql 语句
DROP FUNCTION IF EXISTS fun_getGameAreaNameBySonId;
CREATE FUNCTION fun_getGameAreaNameBySonId (in_str varchar(255)) RETURNS varchar(255)
BEGIN
DECLARE i int DEFAULT 0;
DECLARE fid varchar(255);
DECLARE str varchar(255);
DECLARE tempName varchar(255);
set i=1;
WHILE i>0 DO
SET tempName=(SELECT areaName FROM tb_game_area WHERE id=in_str);
SET fid=(SELECT parentId FROM tb_game_area WHERE id=in_str);
IF ISNULL(tempName) THEN
SET in_str=null;
set i=0;
set str = left(str,char_length(str)-1);
ELSE
SET str=CONCAT(IFNULL(tempName,''),'>',IFNULL(str,''));
SET in_str=fid;
set i=i+1;
END IF;
END WHILE;
RETURN str;
END