SQL-按父子排序结果

SQL-按父子排序结果,sql,sql-order-by,Sql,Sql Order By,我的产品和类别表中有id列和parent列的条目 假设我有以下几点 0 ----- 0 ------ home 1 ----- 4 ------ PD1 2 ----- 0 ------ CAT1 3 ----- 2 ------ PD2 4 ----- 2 ------ CAT2 第一列是id,第二列是父项,最后是标题 是否有方法(使用顺序或其他方法)按以下顺序返回结果 0 ----- 0 ------ home 2 ----- 0 ------ CAT1 3 ---

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

假设我有以下几点

0 ----- 0 ------ home
1 ----- 4 ------ PD1
2 ----- 0 ------ CAT1
3 ----- 2 ------ PD2
4 ----- 2 ------ CAT2
第一列是id,第二列是父项,最后是标题

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

0 ----- 0 ------ home
    2 ----- 0 ------ CAT1
        3 ----- 2 ------ PD2
        4 ----- 2 ------ CAT2
            1 ----- 4 ------ PD1
试试这个

 SELECT * FROM yourtablename ORDER BY parentfieldname 

它能像这样简单吗

ORDER BY ParentID, ID
试试这个:

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

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

其次,您需要一个order by子句:order by top_level.ORDERNING_weight,next_level.ORDERNING_weight,…,DEESTER_level.ORDERNING请注意,我的order by子句首先按树的最高级别排序,最后按树的最低或最深级别排序

ORDER BY top_level.ordering_weight, next_level.ordering_weight, ..., deepest_level.ordering_weight 当然,如果您只是在寻找一个动态的递归级别,那么请忽略上述内容

通常,当我看到这样的父子关系时,我会看到人们想要进行不止一级的递归。您的模式的问题在于它不支持递归的动态级别。您只能获取顶级父级的子级,每增加一级都需要另一个联接(有一些聪明的方法可以克服这一点,但它们仍然需要每个级别增加SQL)

我认为对您更有用的是研究嵌套集模型,它允许查询无限级的递归。 见:

例如,下面的父子关系树使用标准联接非常困难,但使用嵌套集这样的模型非常容易

Category A - Category B - - Category D - Category E Category F - Category G - - Category H - - - Category I - - - - Category J A类 -B类 --D类 -E类 F类 -G类 --H类 --第一类 -——J类
你能出示你的密码吗。。运行时是否显示任何错误?