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;

非常感谢任何帮助

一个例子:

的修改

表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为"第一个" pe和2 for" second"因为第二个附属于一个只有美国高于它的国家,第一个附属于一个城市,州和美国高于它。所以它会按照父母的数量来命令他们获得parentid = 0的最后一个父母;

我希望这有帮助吗?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值