我要做的是按照 parent_id 分组,然后在按照sort_id排序即
意思就是父类排序,然后当前父类面就跟随子类,排序,子类下面还有...第一个父类排序完了就是第二个父类
1 1 1
1-1 1-1 1-1
1-1-1 1-1-1 1-1-1
2 2 2
2-1 2-2 2-3
3 3 3
3-3 3-3 3-3 层级式排序,第一个父类下面是子类一直到此结束,然后再是第二个类别排序,一次类推,N级。
两种办法,一种办法是把所有数据都载入到程序中,然后用c#处理
另一种办法是修改表的设计,加上TreeCode字段,TreeCode字段值的规律如下
00001>
00001>00001>
00001>00002>
00001>00003>
00002>
00002>00001>
00002>00002>
00002>00003>
这个TreeCode字段是冗余字段,通过它可以很方便的取到你要求排序的层级数据
如果这张表的数据量很小的话,建议你把数据载入到程序中用C#写个递归函数处理。如果数据量很大,并且你也有条件修改表结构的话,可以添加冗余字段,解决此问题。
支持你的做法,只是方法二有一个缺点:就是你举的例子,菜单不能超过四层
@小小刀:
菜单几层和这个字段的长度有关系,如果这个字段长度是100的话,每层最多9999个,支持25层。其实用不了那么多的
谢谢您的回复,数据量即使小各人不建议程序里递归,消耗资源太大,而且数据量随着时间推移会逐渐变大,所以推荐数据库递归, 谢谢你,及一楼,最终还是采用一楼的做法,添加冗余字段,解决了....诚心感谢,祝您天天开心。
谢谢您的回复,豆豆给你了,谢谢,其他话不多说。祝您天天开心哈,以后有问题希望伙计帮助哈,虽然我最终方案和你的一样,但是在你回复之前我已经解决了,豆豆还是给你了,谢谢~!
select ROW_NUMBER() over(partition by parent_id order by stort_id) as rownum,Parent_ID,stort_id
from 表,你再改改
谢谢您的回复,我是sqlserver,你给的方案是 oracle ,不过后来还是用sql的 CTE 解决了,就是一楼说的加一个冗余字段....不过非常感谢您的参与,谢谢~!祝你天天开心........