别人问的一个需求:
数据库里面保存的是父子关系结构:
![](https://img2018.cnblogs.com/blog/367203/201908/367203-20190816173300345-2114613435.png)
展示出来的需要根据子类一直查到顶类后将名称全部放一个字段里面,如下:
![](file:///C:Userszhen_wangDocumentsTencent Files346238763ImageC2C]FVSXZ@J8W[UNA{I~Q{[GI4.png)
比如输入的code是1099,名称要显示 配料/花椒/ces
![](file:///C:Userszhen_wangDocumentsTencent Files346238763ImageC2C]FVSXZ@J8W[UNA{I~Q{[GI4.png)
![](https://img2018.cnblogs.com/blog/367203/201908/367203-20190816171040596-1724494562.png)
这里使用到了递归,但是mysql本身没有递归查询,所以这里使用了function函数:
drop function if exists getName; create FUNCTION getName(v_code int) returns varchar(10) begin declare v_name varchar(10); declare v_name2 varchar(10); set v_name=''; set v_name2=''; repeat select `name`,`parent_code` into v_name,v_code from material_type where `code` = v_code limit 1; set v_name2 = concat_ws('/',v_name,v_name2); until v_code = 0 end repeat; return v_name2; end;
然后如下查询操作:
select code,name,parent_code,getName(code) from material_type;
结果显示如下:
注意:这里的顶层跟节点的code必须是0