- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
欢迎⼀起
您可能关注的文档
最近下载
- 农业合作社全套报表(已设公式)--资产负债表-盈余及盈余分配表-成员权益变动表-现金流量表.xls VIP
- C语言程序设计PPT电子课件教案-04_循环语句嵌套及应用.ppt VIP
- 财务新纪元:现状与展望-探索财务工作的挑战与未来.pptx
- GB50496-2018 大体积混凝土施工标准.pdf VIP
- ZW8100喷水织机使用说明书2.pdf
- 冬季极端天气安全知识培训课件.pptx
- 整理bpmfdtnl单韵母拼读.doc VIP
- 南京市总工会2025年公开招聘笔试题(含答案)(DOC).doc VIP
- 中国国家标准 GB/T 42588-2023系统与软件工程 功能规模测量 NESMA方法.pdf
- 人教版初中必背古诗文.doc VIP
有哪些信誉好的足球投注网站
文档评论(0)