Как сделать рекурсивный запрос mysql в древовидной структуре с учетом(where) колонки?

есть древовидная структура таблицы users. Структура реализована примерно так.

`id`, `parent_id`, ..., `status`, ....

Колонка статус может быдть от 1 до 10.

По конкретному пользователю нужно зайти в его дерево и взять всех пользователей у которых статус >4. И если по конкретной линии мы нашли такого пользователя, то по этой линии уже не идем вниз.

Я написал рекурсию который берет все дочерные элелемты.

Но не могу переделать этот запрос так что бы он взял именно так как я выше рассказал.

Кто может помоч доделать запрос?

Прилагаю картинку то же что бы все было понятно.

введите сюда описание изображения

А вот примерная таблица дерева

введите сюда описание изображения

По этому запросу я получаю всех потомков. Но нужно доделать.

with recursive cte (id, parent_id, status)
     as (
         select     id,
                    parent_id,
                    status
         from       users
         where id = :userId
         union all
         select     users.id,
                    users.parent_id,
                    users.status
         from       users
         inner join cte on users.parent_id = cte.id
     )
select * from cte;

Ответы (1 шт):

Автор решения: Raz Galstyan

Запрос который был нужен для такой выборки вот выглядит так.

Может кому то будет полезен.

WITH RECURSIVE users_cte AS (
    SELECT id, parent_id, STATUS,
           CASE WHEN STATUS > 3 AND id <> :userId THEN 0 ELSE 1 END AS continue_recursion
    FROM users
    WHERE id = :userId -- Начало узла
    UNION ALL
    SELECT u.id, u.parent_id, u.status,
           CASE
               WHEN u.status > 3 THEN 0
               ELSE users_cte.continue_recursion
               END AS continue_recursion
    FROM users u
             JOIN users_cte ON u.parent_id = users_cte.id
    WHERE users_cte.continue_recursion = 1
)
SELECT id, STATUS
FROM users_cte
WHERE STATUS > 3;
→ Ссылка