`
a137268431
  • 浏览: 157656 次
文章分类
社区版块
存档分类
最新评论

MySQL 中的树形数据处理示例

 
阅读更多

创建测试表

  1. CREATETABLE`areatest`(
  2. `id`int(11)NOTNULLAUTO_INCREMENT,
  3. `parent_id`int(11)NOTNULLDEFAULT'0'COMMENT'父ID',
  4. `order_id`int(11)NOTNULLDEFAULT'0'COMMENT'排序ID',
  5. `name`varchar(50)NOTNULLCOMMENT'名称',
  6. PRIMARYKEY(`id`)
  7. )ENGINE=MyISAMAUTO_INCREMENT=0DEFAULTCHARSET=utf8COMMENT='地区';
  8. insertinto`areatest`values(1,0,1,'北京'),(2,0,3,'江西'),(3,0,2,'上海'),(4,2,1,'南昌'),(5,2,2,'九江'),(6,4,1,'永修'),(7,4,2,'星子'),(8,2,3,'赣州');

表效果图

创建树形层次分析存储过程

  1. DELIMITER$$
  2. DROPPROCEDUREIFEXISTS`sp_areatest_child_nodes`$$
  3. /*获取指定父ID树形层次数据放到child_nodes临时表*/
  4. CREATEPROCEDURE`sp_areatest_child_nodes`(IN$parent_idINT/*父ID*/)
  5. BEGIN
  6. DECLARELEVELSMALLINTDEFAULT0;/*层次*/
  7. DECLAREcouINTDEFAULT0;
  8. DROPTABLEIFEXISTSchild_nodes_temp;/*单层次临时表*/
  9. DROPTABLEIFEXISTSchild_nodes;/*层次临时表*/
  10. CREATETEMPORARYTABLEchild_nodes_temp(`id`INT,`level`INT,`order_id`VARCHAR(1000))DEFAULTCHARSET=utf8;
  11. CREATETEMPORARYTABLEchild_nodes(`id`INT,`level`INT,`order_id`VARCHAR(1000))DEFAULTCHARSET=utf8;
  12. INSERTINTOchild_nodes_tempSELECT`id`,LEVEL,CAST(RIGHT(100+`order_id`,2)ASCHAR)FROM`areatest`WHERE`parent_id`=$parent_id;
  13. SELECTROW_COUNT()INTOcou;
  14. INSERTINTOchild_nodesSELECT*FROMchild_nodes_temp;
  15. WHILEcou>0DO
  16. SETLEVEL=LEVEL+1;
  17. TRUNCATETABLEchild_nodes_temp;
  18. INSERTINTOchild_nodes_tempSELECTa.`id`,LEVEL,CONCAT(b.order_id,CAST(RIGHT(100+a.`order_id`,2)ASCHAR))FROM`areatest`a,child_nodesbWHEREa.`parent_id`=b.`id`ANDb.`level`=LEVEL-1;
  19. SELECTROW_COUNT()INTOcou;
  20. INSERTINTOchild_nodesSELECT*FROMchild_nodes_temp;
  21. ENDWHILE;
  22. DROPTABLEchild_nodes_temp;
  23. END$$
  24. DELIMITER;

创建树形数据查询存储过程

  1. DELIMITER$$
  2. DROPPROCEDUREIFEXISTS`sp_areatest_tree`$$
  3. /*获取指定父ID树形数据*/
  4. CREATEPROCEDURE`sp_areatest_tree`(IN$parent_idINT/*父ID*/)
  5. BEGIN
  6. CALLsp_areatest_child_nodes($parent_id);
  7. SELECTa.id,CASEb.parent_idWHEN0THENb.nameELSECONCAT(SPACE(a.level*2),'|-',b.name)ENDAS`name`
  8. FROMchild_nodesaINNERJOIN`areatest`bONa.id=b.id
  9. ORDERBYa.order_id;
  10. DROPTABLEchild_nodes;
  11. END$$
  12. DELIMITER;

测试1

CALL sp_areatest_tree(0);

MySQL树形数据处理示例1

测试2

CALL sp_areatest_tree(2);

MySQL树形数据处理示例2

分享到:
评论

相关推荐

    sql树形数据处理示例(Jet wang 最新整理)

    以下是对SQL树形数据处理的一些关键知识点的详细说明: 1. **递归查询**: SQL中的递归查询是处理树形数据的核心方法。通过自连接,我们可以遍历层级关系。例如,使用`WITH RECURSIVE`语句(在PostgreSQL、MySQL ...

    Ztree+treeTable实现 Java实现 树形菜单 树形表格

    在Java开发中,构建用户界面时,树形菜单和树形表格是常见且重要的组件,它们可以帮助用户以层次结构的方式浏览和操作数据。本篇将详细介绍如何利用Ztree和treeTable来实现这样的功能。 Ztree是一款基于JavaScript...

    利用java+mysql递归实现拼接树形JSON列表的方法示例

    在开发Java Web项目时,构建树形数据结构是常见的需求,尤其在展示多级分类、组织结构或地理位置等场景。本篇文章将详细讲解如何利用Java和MySQL递归地实现拼接树形JSON列表的方法。 首先,我们需要理解问题的整体...

    jsp+mysql+java 写的树形

    这个项目提供了从数据库读取数据并用JSP展示的完整流程,对于学习者来说,可以通过阅读和分析这些文件来理解如何结合Java、JSP和MySQL构建动态的Web应用,特别是如何实现树形数据结构的展示。同时,也可以学习到如何...

    【JavaScript源代码】vue Element-ui表格实现树形结构表格.docx

    为了正确渲染树形数据,必须指定 `row-key` 属性,这通常用于唯一标识每一行数据。在这个例子中,`row-key` 被设置为 `id`,这意味着每一行的ID将作为区分不同行的键。 为了指示哪些行具有子节点,可以使用 `...

    C#WinFrom树形菜单数据绑定

    在C# WinForm开发中,树形菜单(TreeView)是一种常用的数据展示控件,它可以将层级结构的数据以直观的方式呈现给用户。本知识点主要聚焦于如何将数据从数据库读取并绑定到TreeView控件上,实现数据的动态加载和显示...

    spring+struts2+hibernate+json+dtree+mysql实现的无限级联树(全)

    5. **dTree插件**:dTree是一款基于JavaScript的可折叠树形菜单组件,用于在网页上显示层次结构的数据。在本项目中,前端可能利用dTree来展示从服务器获取的JSON数据,实现动态的、可交互的无限级联树视图。 6. **...

    树形插件代码

    在IT领域,树形插件是一种常见的用户界面组件,它以树状结构展示数据,使得层级关系一目了然。ZTree是一款广泛使用的JavaScript插件,尤其适用于构建可交互的树形菜单或目录结构。本实例是关于如何利用ZTree与MySQL...

    mysql递归调用获取树节点(子树)

    然而,对于旧版本的MySQL,存储过程仍然是获取树形结构的有效方法。 在提供的`mysql递归调用获取树节点(子树).doc`文档中,应该详细解释了这个过程,包括如何创建和执行存储过程,以及如何使用提供的测试数据。...

    mysql递归调用获取树节点(子树).pdf

    首先,我们需要一个用于存储树形数据的表。在这个例子中,表名为`treenodes`,包含三个字段:`id`(主键,整型,非空)、`nodename`(节点名称,可变长度字符串)和`pid`(父节点ID,整型)。表结构创建语句如下: ...

    树形控件和jquery上传附件

    在树形控件的应用中,数据往往存储在数据库中,如MySQL、Oracle或SQL Server等。数据库脚本用于创建、修改或删除数据库表结构,以便存储和管理树形结构的数据。JDBC(Java Database Connectivity)是Java平台的标准...

    DTree动态树形菜单

    4. **数据结构和算法**:理解如何将数据库中的数据结构映射到树形结构,以及如何有效地遍历和更新这个结构,需要用到数据结构(如链表、二叉树)和算法(如深度优先搜索、广度优先搜索)知识。 5. **异步编程**:...

    Mysql树形递归查询的实现方法

    在数据库管理中,树形...总的来说,尽管MySQL没有内置的递归查询功能,但通过自定义函数和适当的设计,仍然可以有效地处理树形结构数据的查询。理解这些技术可以帮助我们在MySQL环境中优雅地处理复杂的层次数据问题。

    jsp树形菜单

    "jsp树形菜单"是一种常见的网页元素,用于展示层级关系的数据,如网站导航、文件目录或组织结构。本项目利用JavaServer Pages (JSP) 技术,结合MySQL数据库来创建一个可自定义的树形菜单,而且其代码设计灵活,可以...

    zTree树形菜单jquery.rar

    这个“zTree树形菜单jquery.rar”压缩包提供了一个实际的示例,教你如何利用zTree与MySQL数据库相结合,实现动态生成树形菜单的功能。 首先,让我们深入理解zTree的核心功能。zTree是轻量级的,它可以轻松地集成到...

    易语言-通过数据库管理树形框结构数据

    当用户在树形框中进行选择或操作时,我们还需要编写事件处理代码,响应用户的交互并更新数据库中的数据。 在"易语言树形框无限分类的文本管理"这个子文件中,很可能包含了实现这一功能的具体源码示例。通过阅读和...

Global site tag (gtag.js) - Google Analytics