SQL - 由父子进行排序的结果

时间:2011-09-29 19:56:34

标签: sql sql-order-by

我的产品和类别表中有条目id和parent。

让我说我有以下

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

第一个col是id,第二个是父母,最后是头衔。

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

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

4 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

试试这个

 SELECT * FROM yourtablename ORDER BY parentfieldname 

答案 2 :(得分:0)

可能就像

一样简单
ORDER BY ParentID, ID

答案 3 :(得分:0)

首先,如果您想以自定义方式订购(不在命名字段上使用PK或字母),则需要添加一个字段来定义各种对象的排序权重。我会在表中添加一个名为ordering_weight的字段 - 你不想使用字段名称顺序或序列b / c它们是保留的SQL字。

其次,你需要一个order by子句:

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

当然,如果您正在寻找一个动态的递归级别,请忽略上述内容。

通常,当我看到这样的父母子女关系时,我看到人们想要做超过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