关于在Oracle和MySql中实现树形菜单方法探讨
2008-12-16 22:08
621 查看
select t.*, t.SCOPE as sc from DICT_TREE t connect by prior t.DICT_TREE_ID=t.UP_DICT_ID start with t.UP_DICT_ID=82
以上查询语句返回的结果集正好是树形结构的,对生成树形菜单非常方便,不用再对数据进行整理排序,直接将结果集循环打印即可。
在查询时若想对某个节点下的子节点进行排序可在查询语句末尾加上如下代码
order sibling by t.ORDER_NUM
这样就能实现对子节点进行排序了。
以上方法构造树形菜单对于使用oracle数据库的应用来说非常的方便,但如果是使用mysql或其他数据库的话,就不行了。据我所知mysql好象没有类似于connect by prior这样的递归查询语句。前段时间做的一个使用mysql数据的项目在维护树形菜单是通过维护一个rankcode的字段实现结果集的树状排序的。以下是我的实现方法:
每级节点都使用两位数字来标识,子节点加上父节点的rankcode
一级节点的rankcode为两位数字:01~99
二级节点的rankcode为四位数字:0101~0199、0201~0299、0n~0n99
例如:
菜单名 rankcode值
一级菜单A 01
二级菜单a 0101
二级菜单b 0102
一级菜单B 02
二级菜单c 0201
二级菜单d 0202
一级菜单C 03
二级菜单d 0301
三级菜单1 030101
这样通过对rankcode进行排序,返回的结果集也是树形的。在菜单的管理中需要对rankcode进行维护。还有个弊端就是每级节点数量有限制,除非将每级节点的标识增加到3位数字。
我是使用了这么一个笨方法。。希望能在这抛砖引玉,引来更好的更方便的实现方法:) 阅读更多
相关文章推荐
- Oracle EBS诊断方面几种情况的解决方法(诊断菜单隐藏、个性化功能报错、关于此页的显示)
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- 关于MYSQL group by 分组按时间取最大值的实现方法!
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 坑:关于 MySqlClientFactory 没实现 CreateDataAdapter() 方法
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- javascript实现在下拉列表中显示多级树形菜单的方法
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- java实现遍历树形菜单方法——index.jsp实现
- Vue递归实现树形菜单方法实例
- 关于MySQL增、删、改列,以及修改表名的几种方法,同时和Oracle的操作进行比较
- sqlserver/mysql/oracle实现sql语句分页方法
- 关于dorado框架datatable处的右键菜单无法根据具体数据实现动态分别显示不同菜单的解决方法
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- javascript下拉列表中显示树形菜单的实现方法
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- java实现遍历树形菜单方法——设计思路【含源代码】
- java实现遍历树形菜单方法——Dao层
- vue.js与element-ui实现菜单树形结构的解决方法
- Vue递归实现树形菜单方法实例