在单个查询中使用mysql从父节点获取所有子节点

在单个查询中使用mysql从父节点获取所有子节点,mysql,binary-tree,Mysql,Binary Tree,我的桌子是这样的 id | parent | node 1 | NULL | NULL 2 | 1 | L(left) 3 | 1 | R(right) 4 | 2 | L 5 | 2 | R 6 | 3 | L 7 | 3 | R 所以基本上它看起来像一棵树: 假设我需要搜索1的L(左)上的所有child,那么我应该得到用户2,4,5(这些用户的所有child,如果有的话),如果在R(右)中寻找child:3,

我的桌子是这样的

id | parent | node 
1  | NULL   | NULL
2  | 1      | L(left)
3  | 1      | R(right)
4  | 2      | L
5  | 2      | R
6  | 3      | L
7  | 3      | R
所以基本上它看起来像一棵树:


假设我需要搜索1的L(左)上的所有child,那么我应该得到用户2,4,5(这些用户的所有child,如果有的话),如果在R(右)中寻找child:3,6,7等等。。。在查询中有什么方法可以做到这一点吗

也许有办法,但是这个设计对你来说不会很有趣。您应该创建第二个名为node的表,该表包含列left、right和作为父表主键的外键值,然后将与父表中的父表相关的记录插入到节点表中。我认为您应该仔细阅读关系数据库设计,我有点怀疑您是否可以在查询中完成它。您试图做的是构建“父”关系的传递闭包,传递闭包可能意味着无限数量的关系,我看不出在单个查询中就可以做到这一点此外,我同意Ryan Wilson的观点,即您的表的设计需要麻烦:例如,为了强制执行一个父级没有多个左(或右)子级,您需要两个额外的唯一性约束。如果您的表看起来像(id、左、右),您将免费获得此完整性条件。