mysql - 父母与孩子 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
结果是什么:
结果按级别排序,但我需要的是按 parentid 排序的结果:
解决方案
您可以跟踪每个节点的路径,并将其用于排序:
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
推荐阅读
- config - 使用 Android 8,9 构建新应用程序会自动更改 SSID,并安装证书
- android - 在非活动类中显示对话框 1x/天
- azure - 如何将 SpeechToText 结果上传到 Azure 容器?
- arrays - 使用索引将元素添加到对象数组
- java - SonarQube 正在使用 pom.xml 并忽略 sonar-project.properties 文件
- c# - 如何使用企业库日志记录按类别路由日志文件
- r - 如何更改每个列表组件的向量名称
- html - 如何创建自定义按钮光标
- android - Android 广告 ID 何时更改?
- javascript - 试图获取 api 但做出反应会出错