从无限的父子关系中选择所有的孩子

Meh*_*deh 0 mysql

我有一个评论表,行具有父子关系,这意味着任何评论都可以有子项(响应),任何子项本身也可以有子项(无限)。

所有行都在一张表中,根行为parent_id0。

现在我想选择给定parent_id 的所有子级(任何深层)

任何想法 ?

ype*_*eᵀᴹ 5

关于“SELECT”,即如何递归地获取父级的所有后代,这个问题有很多答案:

查找分层字段的最高级别:有 CTE 与没有 CTE

  • Rolando 的方法使用变量和过程。

  • a_horse_with_no_name 的方法使用递归 CTE。这在 MySQL 中尚不可能,但您可以切换到已实现它们的 MariaDB 10.2。

MySQL 中的分层查询

  • @Quassnoi 的博客文章详细解释了如何在 MySQL 中编写递归查询。

对于递归DELETE,所有 MySQL 版本都有一个简单的方法:

  • 使用该选项添加FOERIGN KEY约束(如果尚未添加)ON DELETE CASCADE。然后,简单删除一个节点将删除其所有后代。

  • 您可以修改上面链接中的方法,以执行 aDELETE而不是SELECT.