Как сделать рекурсивный запрос 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 шт):
Запрос который был нужен для такой выборки вот выглядит так.
Может кому то будет полезен.
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;