关于在Oracle和MySql中实现树形菜单方法探讨

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位数字。
我是使用了这么一个笨方法。。希望能在这抛砖引玉,引来更好的更方便的实现方法:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值