mysql 树排序_mysql按树深度排序

我有表'pe'与列id,名称和lcltyid我有表'wp_exrz_locality_localities'与id,name和parent

locality表是树,父级包含另一个位置行的id . pe.lcltyid是关键字wp_exrz_locality_localities.id

基本上我想做的是检索按“树深度”排序的所有'pe'条目

然而,树的总深度可以是任何时间的任何量 . 我需要深度的方式允许我在子查询中使用它进行排序 .

最初我以为我需要一个存储的进程/函数来获取lclty条目的深度 . 在我完成这个过程后,我发现表达式中不能使用 . 然后我尝试创建一个函数,但是我的主机和“log_bin_trust_function_creators = 0”启用了二进制日志记录,因此我没有存储函数 .

最后,我试图理解递归,但似乎无法使它工作 . 我只是想创建一个递归语句来检索“深度”,这意味着直到顶级节点的单个节点的父节点数,或者当父节点= 0时我只是得到一个错误“在'RECURSIVE node_ancestors附近使用的语法......”

WITH RECURSIVE node_ancestors(id, parent) AS (

SELECT id, id FROM `wp_exrz_locality_localities` WHERE id IN (1, 2, 3)

UNION ALL

SELECT na.id, wp_exrz_locality_localities.parent

FROM node_ancestors AS na, wp_exrz_locality_localities

WHERE wp_exrz_locality_localities.id = na.parent AND wp_exrz_locality_localities.parent != 0

)

SELECT id, COUNT(parent) AS depth FROM node_ancestors GROUP BY id;

任何帮助是极大的赞赏

一个例子: EDIT 表pe:

id---name---lcltyid

2---first---4

3---second---3

表wp_exrz_locality_localities:

id---name---parent

1---USA---0

3---SanFran---1

4---California---3

SELECT * FROM 'pe' ORDER BY ([lcltydepth]) ASC;

期望的输出:

id---name---lcltyid

3---second---3

2---first---4

其中lclctydepth为3表示“第一”pe,2表示“秒”,因为第二个附加到一个只有美国高于它的状态,第一个附加到一个城市,州和美国高于它 . 所以它会按照父母的数量来命令他们获得parentid = 0的最后一个父母;

我希望这有帮助?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值