mysql--递归查询所有子节点.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

mysql--递归查询所有⼦节点

背景

有个需求,查询⼀个⽂件中的所有⼦⽬录的⽂件及⽂件夹。

实现

1.数据库设计

⾸先,建⽴⼀张t_files表,模拟⽂件树结构。

createtable`t_files`(

idintauto_increment,

file_namevarchar(100)default,

file_typetinyint(4)default0,

parent_idintnull,

update_timetimestampnull,

primarykey(id),

uniquekey(file_name,parent_id)

);

模拟数据:

表中数据对应⽂件树结构为:根⽬录下有两个⽂件夹,1个⽂件;⽂件夹1下有⼀个⽂件夹3和⼀个⽂件;⽽⽂件夹3下⼜有⼀个⽂件03。

需求:如何⽤sql语句,递归查询到⽂件夹1下的所有⽂件夹及⽂件?

2.实现分析

思路:

第⼀步:先找到⽂件1下的⼦⽬录

select*fromt_fileswhereparent_id=1;

结果:

第⼆步:找到⼦⽬录下⽂件夹下的⼦⽬录

这时候,我们遇到了两个难点:

(1)⼦⽬录下⽂件夹有多个,怎么查询?

(2)⼦⽬录下如果还有⽂件夹,那么就需要⼀直循环下去,什么时候结束?

解决⽅法:

(1)多个同时查询,我们需要⽤到mysql函数;

group_concat():多条记录合成⼀条记录

selectgroup_concat(id)asidsfromt_fileswhereparent_id=1;

结果:

find_in_set(str,strlist):在多条记录中查询特定列

str要查询的字符串

strlist字段名参数以”,”分隔如(1,2,6,8)

selectgroup_concat(id)asidsfromt_fileswherefind_in_set(parent_id,1,4);

结果:

(2)循环如何结束,需要⽤mysqlFUNCTION函数。

whileidisnu

–⾃然语⾔

当所有⼦⽬录下没有⽂件夹就结束

3.mysql实现完整语句

根据以上思路,我们可以通过以下mysql函数,完成递归查询。

DELIMITER//

CREATEFUNCTION`getChildLst`(rootIdINT)

RETURNSvarchar(1000)READSSQLDATA

BEGIN

DECLAREsTempVARCHAR(1000);

DECLAREsTempChdVARCHAR(1000);

SETsTemp=$;

SETsTempChd=cast(rootIdasCHAR);

WHILEsTempChdisnotnullDO

SETsTemp=concat(sTemp,,,sTempChd);

SELECTgroup_concat(id)INTOsTempChdFROMt_fileswhereFIND_IN_SET(parent_id,sTempChd)0;

ENDWHILE;

RETURNsTemp;

END//

DELIMITER;

调动语句:

select*fromt_fileswherefind_in_set(id,getChildLst(1));

结果:

是的,我们完成了需求:查询到⽂件夹1下的所有⽂件夹及⽂件。

4.效果图

我们应⽤它,实现了⼀个h5发布系统,即可以在线操作⽂件。效果如下:

总结

1.⽂件树结构,数据库设计采⽤parent_id这个字段,来标识上⼀级⽬录。

2.mysql中group_concat()函数实现多条记录形成⼀条。

3.mysql中find_in_set()函数实现在集合中查询。

4.mysql中使⽤⾃定义函数function可以实现较复杂的功能。

5.分享下,h5发布系统技术栈。

前端:vue2+element+axios

后台:node+express+fs-extra+mysql

欢迎⼀起

文档评论(0)

151****5730 + 关注
实名认证
文档贡献者

硕士毕业生

1亿VIP精品文档

相关文档