日期:2014-05-18  浏览次数:20610 次

找层次关系
现数据库有表的结构如下: Mark 表示几层,一个*一层,两个*两层,以此类推,PId是Id的父Id,Porder 是同一个父节点的排列顺序,Id可能不连续。
----------------------------------------------------------------
Id PId Mark Porder Name
 
11 5 *.*.*.*.*.* 1 Name11
12 1 *.* 3 Name12  
13 2 *.*.* 1 Name13
18 1 *.* 2 Name18
15 18 *.*.* 1 Name15
3 1 *.* 1 Name3
1 0 * 1 Name1
2 12 *.*.* 1 Name2
4 13 *.*.* 1 Name4
5 15 *.*.*.*.* 1 Name5
6 15 *.*.*.*.* 2 Name6
7 15 *.*.*.*.* 3 Name7
8 15 *.*.*.*.* 4 Name8
20 15 *.*.*.*.* 5 Name20
10 5 *.*.*.*.*.* 2 Name10

现在需要得到下面的结果,就是要显示层次关系,例如:Id为3、18、12的父Id都为1,但Id为18的记录底下有子节点,所以先排Id为18的子节点,再排Id为12的记录, 请问Sql怎么写?

Id PId Mark Porder Name

1 0 * 1 Name1
3 1 *.* 1 Name3
18 1 *.* 2 Name18
15 18 *.*.* 1 Name15
5 15 *.*.*.*.* 1 Name5
11 5 *.*.*.*.*.* 1 Name11
10 5 *.*.*.*.*.* 2 Name10
6 15 *.*.*.*.* 2 Name6
7 15 *.*.*.*.* 3 Name7
8 15 *.*.*.*.* 4 Name8
20 15 *.*.*.*.* 5 Name20
12 1 *.* 3 Name12
2 12 *.*.* 1 Name2
13 2 *.*.* 1 Name13
4 13 *.*.* 1 Name4


------解决方案--------------------
但Id为18的记录底下有子节点,所以先排Id为18的子节点?
ID为12的下面也有子节点呀?
2 12 *.*.* 1 Name2 就是呀?