кол-во рефералов у юзера на каждом уровне, до 3 уровня.
Сделал вот такой запрос
with recursive cte (id, id_referer, lvl) as (
select id,
id_referer,
1 lvl
from tb_users
where id_referer = 1
union DISTINCT
select p.id,
p.id_referer,
lvl + 1
from tb_users p
inner join cte
on p.id_referer = cte.id
where lvl < 3
)
select * from cte
Сейчас я получаю такой вывод
id id_referer lvl
2 1 1
3 1 1
.......
Мне надо получить вот такой ответ
id amount_ref_lvl_1 amount_ref_lvl_2 amount_ref_lvl_3
1 333 400 5999
То есть просто вывести кол-во рефералов у пользователя на каждом уровне.
В конце меняю select * from cte
на
select COUNT(CASE WHEN `lvl` = 1 THEN 1 END) `lvl_1`, COUNT(CASE WHEN `lvl` = 2 THEN 1 END) `lvl_2`, COUNT(CASE WHEN `lvl` = 3 THEN 1 END) `lvl_3` from cte
Правильно делаю ? Или что-то можно проще ?
Хоть бы СУБД какая, сказал... Что за манеры?
Что за структура? Что за рефералы?
Сложно шо писец. Я бы делал вообще не так, а простым селектом из временной таблицы, или въюхи id, ref_id1, ref_id2 select count(*) from tmp_user_refs where id = {id} вот число рефералов 3 уровня, у всех будет родитель родителя это твой id
Кросс репорт то зачем делать? Сделай набор Пользователь, уровень, количество детей.
Обсуждают сегодня