2011-09-29 56 views
2

我的产品和类别列中有条目id和父级的条目。SQL - 父级子女的订购结果

可以说,我有以下

0 ----- 0 ------ home 
1 ----- 4 ------ PD1 
2 ----- 0 ------ CAT1 
3 ----- 2 ------ PD2 
4 ----- 2 ------ CAT2 

拳头山坳作为ID,第二个是父母,并在年底的标题。

有没有一种方法(使用ORDER或其他方法)以下列顺序返回结果?

0 ----- 0 ------ home 
    2 ----- 0 ------ CAT1 
     3 ----- 2 ------ PD2 
     4 ----- 2 ------ CAT2 
      1 ----- 4 ------ PD1 

任何的帮助深表感谢

问候,

菲尔

回答

0

试试这个

SELECT * FROM yourtablename ORDER BY parentfieldname 
+0

父母,身份证不起作用 –

+0

你能否显示你的代码..它显示任何错误运行? – mithunsatheesh

0

会不会是这么简单

ORDER BY ParentID, ID 
1

试试这个:

SELECT id, parent, title 
FROM yourtable 
ORDER BY parent, id 
0

首先,如果你想在一个定制的方式订购(不使用一个名称字段的PK或字母),您需要添加一个字段来定义不同的排序权对象。我会添加一个字段到表中称为类似ordered_weight的字段 - 您不希望使用字段名称顺序或序列b/c它们是保留的SQL字词。

其次,你需要一个命令的条款:

ORDER BY top_level.ordering_weight, next_level.ordering_weight, ..., deepest_level.ordering_weight
请注意,我的命令的子句首先由我的树的最高级别,最后是最低或最深的树。

当然,如果你正在寻找一个动态的递归级别,你可以不考虑上述情况。

通常当我看到像这样的父母子女关系时,我看到人们想要做超过1级的递归。您的模式存在的问题是,它不支持动态递归级别。您只能获取顶级父级的子级,每个额外的级别需要另一个级联(有一些聪明的方法可以让这个过关,但他们仍然需要每级级别的额外SQL)。

我觉得你是看进嵌套集模型,它允许递归的无限水平的查询什么可能是更加有用。 请参阅:http://en.wikipedia.org/wiki/Nested_set_model

例如,以下使用标准连接的父子关系树非常困难,但使用类似嵌套集的模型非常容易。

 
Category A 
- Category B 
- - Category D 
- Category E 
Category F 
- Category G 
- - Category H 
- - - Category I 
- - - - Category J