Как реализовать многоуровневую рефералку?

Burunduk1982

Постоялец
Регистрация
26 Мар 2007
Сообщения
630
Реакции
133
Приветствую всех! Начну, наверное, с избитой фразы "в php (да и в чем-то еще) я не силен". Но столкнулся с задачей развернуть многоуровневую реферальную систему на сайте php+MySQL.

Уровень рефералки определяется наследственными связями user_id и parent_id:

Пример:
User_id = 27, parent_id = 3
(юзер с id27 является рефералом для юзера с id3, а в своей реферальной ветке 27й стоит на 0 ур.)

User_id = 27 (ур 0)
User_id = 29, parent_id = 27 (ур 1)
User_id = 31, parent_id = 27 (ур 1)
User_id = 32, parent_id = 27 (ур 1)
User_id = 48, parent_id = 29 (ур 2)
User_id = 54, parent_id = 32 (ур 2)
User_id = 55, parent_id = 48 (ур 3)
User_id = 56, parent_id = 54 (ур 3)
User_id = 59, parent_id = 48 (ур 3)
User_id = 83, parent_id = 56 (ур 4)
User_id = 86, parent_id = 56 (ур 4)

Необходимо вывести из базы всё реферальное дерево конкретного пользователя. В приведенном примере для пользователя с id27 нужно получить следующую картинку:

[0]=> "27", [1]=> "29,31,32", [2]=> "48,54", [3]=> "55,56,59", [4]=> "83,86", ...

При этом, дерево нужно выводить полностью (бесконечно), насколько существует наследственная связь между user_id и parent_id.

Т.е. для User с id3 дерево приобретет следующий вид:

[0]=> "3", [1]=> "27", [2]=> "29,31,32", [3]=> "48,54", [4]=> "55,56,59", [5]=> "83,86", ...

А если у юзера с id3 будет несколько первоуровневых рефералов:
у id19 (1ур - 20,21,23, 2ур - 25,35,36)
у id28 (1ур - 33,37, 2ур - 82,88,95,96)


[0]=> "3", [1]=> "19,27,28", [2]=> "20,21,23,48,54,33,37", [3]=> "25,35,36,55,56,59,82,88,95,96", ...

Пробовал просто через циклы, но не то. Если наследственность рефералов будет в несколько десятков и сотен - под каждый уровень писать цикл даже для меня извращение. Буду признателен подсказкам, примерам и особенно примерам с комментариями.
 
Назад
Сверху