alestro
@alestro

Как исправить запрос?

Пытаюсь подсчитать количество потомков для сущности в бд, которые связаны по parent_id.
SELECT *, @id := id, (WITH RECURSIVE `cte` AS (
  SELECT  id
    FROM `comments`
    WHERE id = @id
  UNION
  SELECT t.id
    FROM `cte`
    JOIN `comments` AS `t` ON `t`.`parent_id` = `cte`.`id`
)
SELECT COUNT(*) FROM cte) AS c_count FROM comments;

Запрос выше возвращает 1 в колонке c_count для всех рядов выборки.
Но отдельно рекурсивный запрос с указанием конкретного id возвращает корректный результат, например запрос ниже вернет 9, как можно исправить данное поведение?
WITH RECURSIVE `cte` AS (
  SELECT  id
    FROM `comments`
    WHERE id = 86
  UNION
  SELECT t.id
    FROM `cte`
    JOIN `comments` AS `t` ON `t`.`parent_id` = `cte`.`id`
)
SELECT COUNT(*) FROM cte
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
WITH RECURSIVE `cte` AS (
  SELECT `id` AS `root`, `id`
    FROM `comments`
  UNION
  SELECT `cte`.`root`, `t`.`id`
    FROM `cte`
    JOIN `comments` AS `t` ON `t`.`parent_id` = `cte`.`id`
)
SELECT `root`, COUNT(*) AS `count`
  FROM `cte`
  GROUP BY `root`
Ответ написан
Комментировать
IvanU7n
@IvanU7n
nothing interesting here
сделать рекурсивный запрос, который к id привязывает нужное значение, а потом сджойнить его к нужной таблице по тому самому id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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