Burunduk1982
Постоялец
- Регистрация
- 26 Мар 2007
- Сообщения
- 630
- Реакции
- 133
- Автор темы
- #1
Приветствую всех! Начну, наверное, с избитой фразы "в 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", ...
Пробовал просто через циклы, но не то. Если наследственность рефералов будет в несколько десятков и сотен - под каждый уровень писать цикл даже для меня извращение. Буду признателен подсказкам, примерам и особенно примерам с комментариями.
Уровень рефералки определяется наследственными связями 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", ...
Пробовал просто через циклы, но не то. Если наследственность рефералов будет в несколько десятков и сотен - под каждый уровень писать цикл даже для меня извращение. Буду признателен подсказкам, примерам и особенно примерам с комментариями.