`
jiangwt100
  • 浏览: 37470 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

无限分级菜单之嵌套模型

 
阅读更多

       最近写项目,要写一个用户角色权限框架,特意研究了菜单的无限分级。比较推崇这一种方式,希望能给很多正在彷徨的同学一些帮助。

        数据表:Category

        category_id   int   pk

        name varchar(20)

        lft int

        rit int 

       嵌套模型就是把本来是树形的数据变为嵌套的数据,并从左到右进行编号每个元素编一个左一个右。

        以下是一些常用的查找sql语句

     查找整个树

     Select node.name From category as node,category as parent

     Where node.lft between parent.lft and parent.rit

     and parent.name = '根节点的名字'

        order by node.lft

       检索所有的叶子节点

       Select name from category

     where lft=rit+1

       检索一个节点以下所有的节点

      Select node.name from category as node,category as parent

     where node.lft between parent.lft and parent.rit

     and parent.name='节点的名字'

       order by node.lft

       检索节点的深度

      Select node.name from category,(Count(parent.name)-1) As depth

     from category as node

     category as parent

     where node.lft between parent.lft and parent.rit

     group by node.name

     order by node.lft

       (Contact(Repeat(' ',Count(parent.name)-1),node,name))//可以用这个查询实现缩进

      检索节点的直接子节点

      Select node.name,(Count(parent.name)-(sub_tree.depth+1))  as depth

      from category as node

      category as parent

      category as sub_parent

      {

           Select node.name,(Count(parent.name)-1) as depth

           from category as node

           category as parent

           where node.lft between parent.lft and parent.rit

           and node.name = "节点名称''

           group by node.name

           order by node.lft

      }

      as sub_tree

      where node.lft between parent.lft and parent.rit

      and node.lft between sub_parent.lft and sub_parent.rit

      and sub_parent.name = sub_tree.name

      group by node.name

      having depth <=1

      order by node.lft

      新增节点

      1一般的增加节点

      Lock Table category write

      Select @myRight := rit from category

      where name = '左边的节点'


      Update category set rit = rit+2 where rit>@myRight;

      Update category set lft= lft+2 where lft>@myRight;


      Insert Into category(name ,lft,rit) values('a',@myRight+1,@myRight+2)

      Unlock Tables;

      2添加叶子节点

      Lock Table category write

      Select @myLeft := left from category

      where name = '要添加的子节点的父节点名称';


      Update category set rit = rit+2 where rit>@myleft

      Upadte category set lft = lft+2 where lft>@myleft

      Insert Into category(name ,lft,rit) values('a',@myLeft+1,@myleft+2)


      Unlock Tables;


      删除节点

      1删除叶子节点

      Lock Table category write

      Select @myleft := lft,@myRight := rit,@myWidth = rit-lft+1 from category

      Where name = '要删除的叶子节点'

       

       Delete from category where lft between @myleft and @myRight;

       Update category set rit = rit-@myWidth Where rit>@myRight

       Update category set lft = lft-@myWidth Where lft>@myRight 

 

      Unlock Table

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    js javascript 无限级菜单

    无限级菜单允许用户在多个层次之间导航,这意味着菜单项可以有子菜单,这些子菜单也可以有它们自己的子菜单,以此类推,形成无限级别的结构。在HTML中,我们通常使用`&lt;ul&gt;`和`&lt;li&gt;`元素来创建这样的树形结构。 1. *...

    JQ 实现无限分级导航菜单

    "JQ 实现无限分级导航菜单"这个主题聚焦于如何利用jQuery库来创建一个可以无限层级的导航菜单。jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画设计等任务,使得开发者能够更高效地实现复杂的...

    无限级分类js菜单 样本

    在IT领域,无限级分类是一种常见的数据组织方式,特别是在网站导航菜单、文件系统或组织结构中。无限级分类允许我们创建灵活且可扩展的结构,能够处理任意深度的子类别。在这种情况下,"无限级分类js菜单"指的是利用...

    ios-分级菜单.zip

    在分级菜单中,`UITableView`可以通过嵌套使用(即在子表视图中再使用`UITableView`)来实现多级展开的效果。每个菜单项可能对应一个`UITableViewCell`,点击后展开下一级菜单。 2. **数据模型设计**: 为了表示层级...

    zencart 左边导航菜单无限分级

    本文将深入探讨“zencart 左边导航菜单无限分级”这一主题,以及如何通过无限递归思想来实现这一功能。 首先,我们需要理解“无限分级”的概念。在网站菜单设计中,无限分级意味着菜单可以包含任意数量的子级,而不...

    jQuery左侧分级菜单

    "jQuery左侧分级菜单"是一个专门用于构建这样的交互式菜单的解决方案。这个标题表明我们正在讨论一个利用jQuery库来创建的、位于页面左侧且具有多级层次的菜单系统,这种菜单在用户界面上通常提供优秀的导航体验。 ...

    易语言Access版本易语言树型框无限分级.rar

    易语言Access版本易语言树型框无限分级.rar 易语言Access版本易语言树型框无限分级.rar 易语言Access版本易语言树型框无限分级.rar 易语言Access版本易语言树型框无限分级.rar 易语言Access版本易语言树型框无限...

    oracle分级菜单查询

    把多级菜单用一份语句查询出来 如 1---- 1.1-- 1.2-- 2---- 2.1-- 2.2--

    一个无限级分类 无下拉菜单无限级分类

    无限级分类意味着一个分类可以有任意数量的子分类,这些子分类又可以有它们自己的子分类,形成一个无限延伸的树状结构。这种结构非常适合那些层次关系复杂、可能需要不断扩展的场景。 在实现过程中,通常会使用自...

    dropdown无线横向分级菜单

    在网页设计中,"dropdown无线横向分级菜单"是一种常见的交互元素,主要用于网站导航,它可以将多个子菜单层次结构地组织起来,用户可以通过点击主菜单项来展开或收起子菜单。这种菜单通常由JavaScript(JS)驱动,...

    用R和WinBUGS实现贝叶斯分级模型

    贝叶斯分级模型是一种统计模型,它在处理动态、非线性和噪声较多的生态过程方面具有独特优势。这种方法是适合于由内生动态过程以及人口和环境过程的噪声所驱动的系统,而这些系统仅能通过错误进行观测。在生物动态...

    无限分级------C#+sqlserver

    无限分级通常指的是在数据库中存储的数据结构呈现出树状或者层级结构,如组织结构、菜单系统等,每个节点可能有任意数量的子节点,且没有预设的最大深度。 首先,无限分级的数据库设计通常采用自引用的方式,即在同...

    Access版本树型框无限分级.rar

    标题"Access版本树型框无限分级.rar"暗示了这个压缩包可能包含了一个关于如何在Access中实现无限级别的树状数据显示的教程或者示例代码。"Access版本易语言树型框无限分级"则表明,实现这一功能可能采用了易语言作为...

    带动画伸缩菜单可分级菜单超出后自动显示滚动条滚动条样式自定义

    "带动画伸缩菜单可分级菜单超出后自动显示滚动条滚动条样式自定义"这一主题聚焦于前端开发中的交互设计,主要涉及以下几个核心知识点: 1. **伸缩菜单(Accordion Menu)**: 伸缩菜单是一种节省空间、提升用户...

    树的无限分级递归调用

    在本话题中,我们将深入探讨“树的无限分级递归调用”这一主题,特别关注如何在Visual Studio 2010环境下利用递归实现树的层级遍历。递归是一种函数或过程在其定义中直接或间接地调用自身的技术,常用于解决具有重复...

    数据库版无限分级树形菜单

    练习用,花了100分问问题的成果。囧! 菜鸟上路,代码共享QQ:846461,希望高手加我加以指导。 db_path = "x.mdb" Set conn= Server.createObject("ADODB.Connection") connstr = "Provider=Microsoft.Jet.OLEDB....

    JS写的一个无限分级树

    "JS写的一个无限分级树"就是一个利用JavaScript实现的可以无限扩展层级的树结构组件。这种组件通常用于展示具有层级关系的数据,并提供交互功能,如展开/折叠节点、搜索、拖放等。 首先,我们需要理解树的基本概念...

    jquery插件-树形导航分级菜单 有实例

    本资源提供了两个jQuery插件,专门用于创建树形导航分级菜单,这对于构建层次结构清晰、易于交互的网站菜单至关重要。下面我们将深入探讨这两个插件以及相关技术。 1. **jQuery Treeview 插件** jQuery Treeview ...

    jquery实现无限分级横向导航菜单的方法

    在当今的Web开发中,创建一个具有无限分级的横向导航菜单是构建网站导航系统的一个常见需求。通过jQuery,我们能够利用JavaScript库的便利和强大功能,实现一个响应式的无限分级横向导航菜单。本文将详细探讨如何...

Global site tag (gtag.js) - Google Analytics