在php中获取二叉树中的最后一个左子女

在php中获取二叉树中的最后一个左子女,php,mysql,binary-tree,hierarchical-data,recursive-query,Php,Mysql,Binary Tree,Hierarchical Data,Recursive Query,我正在尝试在二叉树中获取赞助商id的最后一个左子女。 比如:这是目前的情况(图中),当id7在其左侧添加一个客户(其id将为14)时,它将在id10(即已知的id14上线)下加入。因为这是id7的最后一个孩子 我尝试了很多例子,比如: ,但没有发现有用的 那么,我如何找到赞助商id 7的最后一个左节点呢。插入新客户时使用 这是我的数据库--“cm客户” 任何帮助都将不胜感激。提前感谢。在MySQL 8.0中,您可以通过递归查询来实现这一点: with recursive nodes as (

我正在尝试在二叉树中获取赞助商id的最后一个左子女。 比如:这是目前的情况(图中),当id7在其左侧添加一个客户(其id将为14)时,它将在id10(即已知的id14上线)下加入。因为这是id7的最后一个孩子

我尝试了很多例子,比如:

,但没有发现有用的

那么,我如何找到赞助商id 7的最后一个左节点呢。插入新客户时使用

这是我的数据库--“cm客户”


任何帮助都将不胜感激。提前感谢。

在MySQL 8.0中,您可以通过递归查询来实现这一点:

with recursive nodes as (
    select serial_id, upline, left pos, 1 lvl from customers where upline = 0
    union all
    select c.serial_id, c.upline, n.left + c.left, n.lvl + 1
    from nodes n
    inner join customers c on c.upline = n.serial_id
)
select *
from nodes
order by lvl desc, pos desc
limit 1

查询从根到叶遍历层次结构树,同时跟踪每个节点的级别以及访问了多少“左”节点。然后,您可以使用这些信息来识别最深、最左侧的节点。

在MySQL 8.0中,您可以通过递归查询来实现这一点:

with recursive nodes as (
    select serial_id, upline, left pos, 1 lvl from customers where upline = 0
    union all
    select c.serial_id, c.upline, n.left + c.left, n.lvl + 1
    from nodes n
    inner join customers c on c.upline = n.serial_id
)
select *
from nodes
order by lvl desc, pos desc
limit 1

查询从根到叶遍历层次结构树,同时跟踪每个节点的级别以及访问了多少“左”节点。然后,您可以使用这些信息来识别最深、最左侧的节点。

这需要一些PHP代码作为上下文。为什么数据库中有二叉树?这不是您通常看到的情况。这需要一些用于上下文的PHP代码。为什么数据库中有二叉树?这不是你通常看到的东西。@Anmolsingh:不,这需要MySQL 8.0。在早期版本的MySQL中,执行诸如遍历层次结构之类的任务将更具挑战性,因为在早期版本的MySQL中,递归查询不可用。@Anmolsingh:不,这需要MySQL 8.0。在早期版本的MySQL中执行像遍历层次结构这样的任务将更具挑战性,因为在早期版本中,递归查询不可用。