小编典典

递归选择?

sql

我具有以下表结构:

在此处输入图片说明

因此,每个论坛帖子都有一个父母,也有一个父母(根帖子除外),等等。我需要的是获取一个论坛帖子所拥有的孩子总数,包括他的孩子的孩子,孙子的孩子等等。

现在,我有一个简单的选择返回直接子代:

select count(*) as child_count 
from forumposts 
where parent_forum_post_id = $criteria.fid

我什至不确定这是否可以通过sql来实现,但是我是SQL的入门者,因此我认为也许有人可以提出一些想法。

任何帮助表示赞赏。谢谢。


阅读 166

收藏
2021-03-10

共1个答案

小编典典

这应该做到这一点:

with recursive all_posts (id, parentid, root_id) as 
(
  select t1.id, 
         t1.parent_forum_post_id as parentid, 
         t1.id as root_id
  from forumposts t1
  where t1.parent_forum_post_id is null

  union all

  select c1.id, 
         c1.parent_forum_post_id as parentid,
         p.root_id
  from forumposts c1
    join all_posts p on p.id = c1.parent_forum_post_id
)
select root_id, count(*)
from all_posts
order by root_id;

您可以通过修改条件来更改“起点” where t1.parent_forum_post_id is null

2021-03-10