- 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
欢迎⼀起
您可能关注的文档
最近下载
- (人教版PEP)五年级英语上册单元检测卷(1-3单元)有答案.doc VIP
- 七年级下册心理健康教育教案(全册).docx VIP
- TLTA009-1-2024 鞋类穿着舒适性 第 1 部分:设计指南.pdf VIP
- 22G610-1 建筑隔震构造详图 .docx VIP
- 江西理文化工有限公司年产4万吨R22项目环境影响评价报告书.pdf VIP
- 2025浙江省特种设备科学研究院招聘32人笔试备考题库及答案解析.docx VIP
- 水洗塔结构图.pdf VIP
- 人才资本对经济增长贡献率理论研究(武汉工程大学桂昭明).doc VIP
- 14445小学教育管理-精讲课件.pdf VIP
- 2025年山东省济南市中考语文真题含答案.docx VIP
原创力文档


文档评论(0)