`
junjie314
  • 浏览: 60114 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

一个捆扰我好几天sql分组排(树形结构查询+排序)

阅读更多
我要做的是一个菜单的排序问题
id           fatherId             menuPath                 number
107             1                   /107                     38
108            107                  /107/108                  2
109            107                  /107/109                  1
110            109                  /107/109/110              5
111            109                 /107/109/111               4
112             1                  /112                      23
113            112                 /112/113                   2
114            112                 /112/114                   1
115            114                 /112/114/115               9
116            114                 /112/114/116               8




我要实现的是先按menuPath分组  /107开头的是一组 /112开头的又是一组

fatherId是1的话代表是父菜单  父和父之间要排序(number38和number23)....最后父菜单下面的子菜单也要排序 按字段number排序 如下是107的子菜单
 108     107          /107/108        2 
 109     107          /107/109        1 
(我的菜单可以是无限级的  108和109的父菜单是107 113和114的父菜单是112  110和111的父菜单是109  115和116的父菜单114)


最后实现后的效果需要这个
id      fatherId        menuPath           number
112        1             /112               23       (一级父菜单)
114        112           /112/114            1     (一级下的子菜单,也可以是二级父菜单)
116        114           /112/114/116        8       (二级父菜单下的子菜单)
115        114           /112/114/115        9       (二级父菜单下的子菜单)
113        112           /112/113            2      (一级下的子菜单,也可以是二级父菜单)

107        1             /107                38         (一级父菜单)
109        107          /107/109             1    (一级下的子菜单,也可以是二级父菜单)  
111        109          /107/109/111         4      (二级父菜单下的子菜单)
110        109          /107/109/110         5      (二级父菜单下的子菜单)
108        107          /107/108             2    (一级下的子菜单,也可以是二级父菜单)
说的够详细了吧..大家吧 我脑袋都要爆炸了.可以随便增加字段  不管什么方法只要能实现就OK了嘿嘿



分享到:
评论
10 楼 junjie314 2007-06-18  
TO 抛出异常的爱 :你那方法不行,可能我没表达清楚吧...你看看我上传的图吧
9 楼 抛出异常的爱 2007-06-18  
junjie314 写道
to 抛出异常的爱 :  用存储过程怎么写..目的就是把数据按树形结构查询出来..这个没问题..问题就是排序,各个同级别菜单之间要排序..而且排序的那个number字段用户是要修改的.因为可以自定义顺序嘛!嘿嘿..大家拉
加列,叫父目录名,
把menupdate那列中的终级子目录去掉,成为一个只有父目录的地图
之后 父目录名与muber一起排序就应该可以了
8 楼 junjie314 2007-06-18  
to 抛出异常的爱 :  用存储过程怎么写..目的就是把数据按树形结构查询出来..这个没问题..问题就是排序,各个同级别菜单之间要排序..而且排序的那个number字段用户是要修改的.因为可以自定义顺序嘛!嘿嘿..大家拉
7 楼 junjie314 2007-06-18  
TO qiezi   :如果我按menupath排序后 那number这个字段就排序不了啊..因为我的排序是可以自定义的啊.用户要修改的呢
6 楼 qiezi 2007-06-17  
直接按menuPath排序不行吗?结果应该是这样的:
# 112        1             /112               23       (一级父菜单)  
# 113        112           /112/113            2      (一级下的子菜单,也可以是二级父菜单)  
# 114        112           /112/114            1     (一级下的子菜单,也可以是二级父菜单)  
# 116        114           /112/114/116        8       (二级父菜单下的子菜单)  
# 115        114           /112/114/115        9       (二级父菜单下的子菜单)  

#   
# 107        1             /107                38         (一级父菜单)  
# 108        107          /107/108             2    (一级下的子菜单,也可以是二级父菜单)  
# 109        107          /107/109             1    (一级下的子菜单,也可以是二级父菜单)    
# 111        109          /107/109/111         4      (二级父菜单下的子菜单)  
# 110        109          /107/109/110         5      (二级父菜单下的子菜单)  
5 楼 抛出异常的爱 2007-06-17  
这是在知道一共有几级目录下的用法
在不知道时我只能用存储过程来写了。
PS:为什么不在程序里写?又不是很多一次读入内存也受的了
id           fatherId             menuPath                 number
107             1                 001070000000000            38
108            107                001070010800000             2
109            107                001070010900000             1
110            109                001070010900110             5
111            109                001070010900111             4
112             1                 001120000000000            23
113            112                001120011300000             2
114            112                001120011400000             1
115            114                001120011400115             9
116            114                001120011400116             8
4 楼 junjie314 2007-06-16  
可怜啊..怎么人都没有啊
3 楼 junjie314 2007-06-16  
zkgale 写道
我觉得你的menupath列的值是不是有点问题?

我说说我的看法哈,我不一定说得对哦^^

id     fatherid    menupath    number
107    1           107         38 
108    107         108         2 
109    107         109         1 
110    109         110         5 
111    109         111         4 
112    1           112         23 
113    112         113         2 
114    112         114         1 
115    114         115         9 
116    114         116         8


这样不是很好吗?为什么menupath列还要加上它的路径呢?在fatherid中已经指明了当前菜单的父菜单是那个了,只要fatherid这一列值相等,则说明它们是同一个父菜单的子菜单了,而menupath则表明子菜单的名字,

这样纯数字的分组排序应该好做吧....
但是像你这样的话排序就有问题了呀,id是主键 ..像现在最大ID是116,,我这时想插入一条107的子菜单..那ID就是117  我排序时候是要显示在111后面的,,因为是同一组的..这样怎么排序呢
2 楼 zkgale 2007-06-16  
我觉得你的menupath列的值是不是有点问题?

我说说我的看法哈,我不一定说得对哦^^

id     fatherid    menupath    number
107    1           107         38 
108    107         108         2 
109    107         109         1 
110    109         110         5 
111    109         111         4 
112    1           112         23 
113    112         113         2 
114    112         114         1 
115    114         115         9 
116    114         116         8


这样不是很好吗?为什么menupath列还要加上它的路径呢?在fatherid中已经指明了当前菜单的父菜单是那个了,只要fatherid这一列值相等,则说明它们是同一个父菜单的子菜单了,而menupath则表明子菜单的名字,

这样纯数字的分组排序应该好做吧....
1 楼 junjie314 2007-06-16  
晕,中间怎么空了一行!~

相关推荐

    sql高级进阶

    - 树形查询:介绍如何在数据库中查询层次数据。 以上详细知识点是对【部分内容】中提供的主题的具体阐述。这些知识点构成了SQL高级进阶学习的完整体系,覆盖了数据查询、数据处理、多表操作、字符串和数值处理、...

    Oracle+SQL精妙SQL语句讲解.txt

    此查询首先根据`TABLE1.ID`对数据进行分组,并按`NAME`排序,然后使用`ROW_NUMBER()`函数为每一组分配一个行号。之后使用`SYS_CONNECT_BY_PATH`函数,通过递归的方式将每个节点下的`ROLE`列值按照指定的分隔符(此处...

    SQL-21天自学通

    - **层次模型:** 最早出现的数据库模型之一,其特点是数据以树形结构组织。 - **网状模型:** 层次模型的扩展,支持多对多的关系。 - **关系模型:** 由Edgar F. Codd在1970年提出,奠定了现代数据库的基础。数据以...

    大厂面试系列二.pdf

    在函数内定义一个字符数组,并使用gets函数输入字符串时,如果输入超出了数组分配的空间大小,就会发生缓冲区溢出。这种情况会导致程序崩溃的原因是,溢出的数据可能会覆盖程序的其他内存区域,包括栈上的返回地址、...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

    C#编程经验技巧宝典

    122 <br>0205 如何使用正则表达式验证两位小数 122 <br>0206 如何使用正则表达式验证一年的12个月份 123 <br>0207 如何使用正则表达式验证一个月的31天 123 <br>0208 如何使用正则表达式验证数字...

Global site tag (gtag.js) - Google Analytics