Вопрос по sql, postgresql – Рекурсивный выбор?

2

У меня есть следующая структура таблицы:

enter image description here

Таким образом, у каждого сообщения на форуме есть родитель, у которого также есть родитель (кроме корневых сообщений) и т. Д. То, что мне нужно, это получить общее количество детей, которые имеет официальный форум, включая его детей, детей внуков и так далее.

На данный момент у меня есть простой выбор, который возвращает непосредственных детей:

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

Я даже не уверен, что это можно сделать с помощью sql, но я начинающий в SQL, поэтому я подумал, что, может быть, кто-то может дать некоторые идеи.

Любая помощь приветствуется. Благодарю.

Эта тема может помочь:stackoverflow.com/questions/1323245/… Logan Serman
В следующий раз, пожалуйста, опубликуйте пример данных какINSERT заявления. Или хотя бы как текст. Таким образом, для тех, кто отвечает, проще настроить тестовую таблицу с данными. a_horse_with_no_name
Хорошо, я попробую это :) Fofole

Ваш Ответ

4   ответа
0
WITH RecursiveCte AS
(
SELECT 1 AS LEVEL,
       H1.intUserId,
       H1.intReportsTo,
       H1.strUserName
FROM   mstUsers H1
WHERE  id = @intUserId
UNION ALL
SELECT RCTE.level + 1 AS LEVEL,
       H2.intUserId,
       H2.intReportsTo,
       H2.strUserName
FROM   mstUsers H2
       INNER JOIN RecursiveCte RCTE
            ON  H2.intReportsTo = RCTE.
)
SELECT intUserId,strUserName,LEVEL FROM RecursiveCte
6

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;

Вы можете изменить & quot; начальный & quot; указать путем изменения условияwhere t1.parent_forum_post_id is null.

0

С рекурсивным  в Postgresql

Похожие вопросы