一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于闭包表的MySQL树形数据查询方法和系统与流程

2022-02-20 01:28:32 来源:中国专利 TAG:
基于闭包表的mysql树形数据查询方法和系统
技术领域
1.本发明涉及数据查询技术领域,具体地,涉及一种基于闭包表的mysql树形数据查询方法和系统。


背景技术:

2.众所周知,mysql树形结构数据检索困难,而别的数据库就自带更优雅的解决办法,如oracle,对于树形查询可以使用startwith...connectby,qlserver可以使用with关键字。目前在mysql里有2种主流的解决方案,如下表:
3.idpid10213243
4.第1种:在应用程序里面,先通过进程标识符pid查询出所有子节点,然后依次查询子节点下所有下级节点,依次递归直到找不到子节点为止;第2种:在mysql里面,定义存储过程,利用游标的下移查找所有节点。以上两种做法均有缺陷,第1种需要递归,多次访问数据库,需要占用数据库连接,效率低下;第2种可读性差、难以维护、可移植能力差。有鉴于此,本发明针对现有技术的缺陷深入研究,并有本案产生,只需要一个sql就能解决问题。
5.专利文献cn103853773a(申请号:cn201210511993.x)公开了一种mysql数据库下树形数据结构的检索方法,包括:在标准的树形数据结构表的基础上增加一个path字段,该path字段记录每个节点的路径,该path字段内容为:本节点及上级所有节点通过字符拼接;得到一新的树形数据结构表;当执行数据查询时,根据所要查询的节点的path字段来匹配节点,查到该节点下所有节点。还可以再增加一个layer字段,该layer字段记录每个节点的层级;步骤3:当执行数据查询时,根据所要查询的节点的layer字段来匹配节点,查到某一层级的所有节点,或者某一层级的节点个数。然而该专利具体实现的sql采用了like关键词,不会走索引,会导致性能低下。
6.专利文献cn104102699a(申请号:cn201410313170.5)公开了一种聚簇图集合中的子图检索方法,包括:索引建立步骤,根据聚簇图的结构信息和结点属性计算聚簇图集合中各聚簇图之间的相似性,根据各聚簇图之间的相似性采用层次聚类算法将相近的聚簇图聚类,直到剩下一个聚簇图;子图检索步骤;根据用户发起查询图的结构以及顶点属性,对聚簇图索引树采用树的自顶向下的方式进行查询图的同构匹配。然而该专利需要多次访问数据库,需要占用数据库连接,会导致效率低下。


技术实现要素:

7.针对现有技术中的缺陷,本发明的目的是提供一种基于闭包表的mysql树形数据查询方法和系统。
8.根据本发明提供的基于闭包表的mysql树形数据查询方法,包括:
9.步骤1:将树形数据插入到系统菜单sys_menu;
10.步骤2:通过系统菜单查询id为4的所有子节点;
11.步骤3:通过系统菜单查询id为4的所有父节点;
12.步骤4:通过系统菜单删除id为4的所有子节点。
13.优选的,所述步骤1包括:
14.进行数据准备和变量定义,给pid为4的节点添加pid为5的子节点,编写sql,为:
15.insertintosys_menu(id,pid)select5,pidfromsys_menu_relationwhereid=4
16.unionall
17.select5,5
18.先插入自己和自己的关系,再查找节点id为4的所有的pid,最后合并节点并插入到系统菜单中。
19.优选的,所述步骤2包括:通过系统菜单查询所有的孩子节点,编写sql,为:
20.select*fromsys_menu_relationwherepid=4。
21.优选的,所述步骤3包括:通过系统菜单查询所有的父亲节点,编写sql,为:
22.select*fromsys_menu_relationwhereid=4。
23.优选的,所述步骤4包括:通过系统菜单查询所有的pid为4的节点并进行删除,编写sql,为:
24.deletefromsys_menu_relationwhereidin(selectidfromsys_menu_relationwherepid=4)。
25.根据本发明提供的基于闭包表的mysql树形数据查询系统,包括:
26.模块m1:将树形数据插入到系统菜单sys_menu;
27.模块m2:通过系统菜单查询id为4的所有子节点;
28.模块m3:通过系统菜单查询id为4的所有父节点;
29.模块m4:通过系统菜单删除id为4的所有子节点。
30.优选的,所述模块m1包括:
31.进行数据准备和变量定义,给pid为4的节点添加pid为5的子节点,编写sql,为:
32.insertintosys_menu(id,pid)select5,pidfromsys_menu_relationwhereid=4
33.unionall
34.select5,5
35.先插入自己和自己的关系,再查找节点id为4的所有的pid,最后合并节点并插入到系统菜单中。
36.优选的,所述模块m2包括:通过系统菜单查询所有的孩子节点,编写sql,为:
37.select*fromsys_menu_relationwherepid=4。
38.优选的,所述模块m3包括:通过系统菜单查询所有的父亲节点,编写sql,为:
39.select*fromsys_menu_relationwhereid=4。
40.优选的,所述模块m4包括:通过系统菜单查询所有的pid为4的节点并进行删除,编写sql,为:
41.deletefromsys_menu_relationwhereidin(selectidfromsys_menu_
relationwherepid=4)。
42.与现有技术相比,本发明具有如下的有益效果:
43.本发明采用冗余的树形结构数据关系,直接通过id或者pid,仅一个sql就能查询到上级和下级,减少了应用程序连接mysql的次数,同时它的移植性更好,能支持mysql、oracle、sqlserver等数据库,无需借助数据库的特殊语法。
附图说明
44.通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
45.图1为节点关系图。
具体实施方式
46.下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
47.实施例:
48.根据本发明提供的一种基于闭包表的mysql树形数据查询方法,包括以下步骤:
49.步骤1:树形数据插入到sys_menu表;
50.所述步骤1包括:
51.步骤1.1:数据准备,定义好变量,给pid为4的节点添加子节点5;
52.步骤1.2:编写sql,具体形式为:insertintosys_menu(id,pid)select5,pidfromsys_menu_relationwhereid=4
53.unionall
54.select4,4
55.最终sys_menu表的数据如下:
56.idpid4454
57.步骤2:查询id为4的所有子节点;
58.select*fromsys_menu_relationwherepid=4;
59.步骤3:查询id为4的所有父节点;
60.select*fromsys_menu_relationwhereid=4
61.步骤4:删除id为4的所有子节点,包括自己;
62.deletefromsys_menu_relationwhereidin(selectidfromsys_menu_relationwherepid=4)
63.如图1,为节点关系图:上图有4、5、6这3个节点的数据,箭头自己指向自己代表着自己和自己的关系;箭头指向下方,代表孩子节点,最终转换成如下表结构数据存储格式:
64.idpid
445464556566
65.根据本发明提供的基于闭包表的mysql树形数据查询系统,包括:模块m1:将树形数据插入到系统菜单sys_menu;模块m2:通过系统菜单查询id为4的所有子节点;
66.模块m3:通过系统菜单查询id为4的所有父节点;模块m4:通过系统菜单删除id为4的所有子节点。
67.所述模块m1包括:进行数据准备和变量定义,给pid为4的节点添加pid为5的子节点,编写sql,为:insertintosys_menu(id,pid)select5,pidfromsys_menu_relationwhereid=4,unionall,select5,5。先插入自己和自己的关系,再查找节点id为4的所有的pid,最后合并节点并插入到系统菜单中。所述模块m2包括:通过系统菜单查询所有的孩子节点,编写sql,为:select*fromsys_menu_relationwherepid=4。所述模块m3包括:通过系统菜单查询所有的父亲节点,编写sql,为:select*fromsys_menu_relationwhereid=4。所述模块m4包括:通过系统菜单查询所有的pid为4的节点并进行删除,编写sql,为:deletefromsys_menu_relationwhereidin(selectidfromsys_menu_relationwherepid=4)。
68.本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
69.以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献