首页 > 解决方案 > 父母与孩子 MySQL

问题描述

我的 SQL 查询如下所示:

WITH RECURSIVE a (templid,type,parentid,enname,dename,sys,level) AS 
(
 SELECT templid,type,parentid,enname,dename,sys,1 
 FROM template 
 WHERE type = :type AND parentid = :parentId 
 UNION ALL 
 SELECT b.templid,b.type,b.parentid,b.enname,b.dename,b.sys,(level+1) as level 
 FROM template b JOIN a ON b.parentid = a.templid
) SELECT * FROM a

结果是什么:

MySQL-结果

结果按级别排序,但我需要的是按 parentid 排序的结果:

MySQL-想要的结果

标签: mysqlsqlsql-order-byhierarchical-datarecursive-query

解决方案


您可以跟踪每个节点的路径,并将其用于排序:

with recursive a (templid, type, parentid, enname, dename, sys, level, path) as (
    select templid, type, parentid, enname, dename, sys, 1, templid as path
    from template 
    where type = :type and parentid = :parentid 
    union all 
    select b.templid, b.type, b.parentid, b.enname, b.dename, b.sys, a.level + 1, concat(a.path, '/', b.templid)
    from template b 
    inner join a on b.parentid = a.templid
) 
select * from a order by path

推荐阅读