怎么在MySQL中通过自定义函数实现递归查询父级ID或者子级ID
这篇文章给大家介绍怎么在MySQL中通过自定义函数实现递归查询父级ID或者子级ID,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、环境准备
1、建表
CREATETABLE`table_name`(`id`int(11)NOTNULLAUTO_INCREMENT,`status`int(255)NULLDEFAULTNULL,`pid`int(11)NULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1CHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;
2、插入数据
INSERTINTO`table_name`VALUES(1,12,0);INSERTINTO`table_name`VALUES(2,4,1);INSERTINTO`table_name`VALUES(3,8,2);INSERTINTO`table_name`VALUES(4,16,3);INSERTINTO`table_name`VALUES(5,32,3);INSERTINTO`table_name`VALUES(6,64,3);INSERTINTO`table_name`VALUES(7,128,6);INSERTINTO`table_name`VALUES(8,256,7);INSERTINTO`table_name`VALUES(9,512,8);INSERTINTO`table_name`VALUES(10,1024,9);INSERTINTO`table_name`VALUES(11,2048,10);
二、MySQL函数的编写
1、查询当前节点的所有父级节点
delimiter//CREATEFUNCTION`getParentList`(root_idBIGINT)RETURNSVARCHAR(1000)BEGINDECLAREkINTDEFAULT0; DECLAREfidINTDEFAULT1; DECLAREstrVARCHAR(1000)DEFAULT'$'; WHILErootId>0DOSETfid=(SELECTpidFROMtable_nameWHEREroot_id=id);IFfid>0THENSETstr=concat(str,',',fid);SETroot_id=fid;ELSESETroot_id=fid;ENDIF;ENDWHILE; RETURNstr;END//delimiter;
2、查询当前节点的所有子节点
delimiter//CREATEFUNCTION`getChildList`(root_idBIGINT)RETURNSVARCHAR(1000)BEGINDECLAREstrVARCHAR(1000);DECLAREcidVARCHAR(1000);DECLAREkINTDEFAULT0;SETstr='$';SETcid=CAST(root_idASCHAR);12WHILEcidISNOTNULLDOIFk>0THENSETstr=CONCAT(str,',',cid);ENDIF;SELECTGROUP_CONCAT(id)INTOcidFROMtable_nameWHEREFIND_IN_SET(pid,cid)>0;SETk=k+1;ENDWHILE;RETURNstr;END//delimiter;
三、测试
1、获取当前节点的所有父级
SELECTgetParentList(10);
2、获取当前节点的所有字节
SELECTgetChildList(3);
关于怎么在MySQL中通过自定义函数实现递归查询父级ID或者子级ID就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。