Форумы портала PHP.SU » » Вопросы новичков » Интересная и сложная задачка...

Страниц (1): [1]
 

1. kuller - 16 Апреля, 2018 - 04:37:10 - перейти к сообщению
Доброго времени суток!

Помогите пожалуйста решить задачку. На словах вроде все понятно и просто, но на деле возникает много сложностей.
Есть обычная регистрация на сайте с рефиральной системой т.е. человек может по своейреферальной ссылке пригласить другого человека. В базе создал таблицу в которую должны записаться id зарегистрированного человека. Но вот порядок записи id не совсем простой. Прикрепил скрин таблицы (для более понятного понимания)
[img]https://preview[dot]ibb[dot]co/i3WgnS/1[dot]jpg[/img]

На первом скрине видим заполненые строки start_user и one_level
1. start_user - суда как раз попадает id от кого была регистрация
2. one_level - суда пишутся все id пользователей кому я давал ссылку.

Эту часть кода написал. А вот дальше полный ступор... Как видим из таблицы есть следуюшие колонки two_level, three_level, four_level и т.к. до seven_level. В каждую эту колонку должны записаться id от моих приглашенных.


Пример:
я дал ссылку Сидорову
Сидоров дал ссылку Иванову

Тогда в базе происходит следующее... (скрин 2 [img]https://preview[dot]ibb[dot]co/bFB8Z7/2[dot]jpg[/img]) в колонку two_level запишется id Иванова т.к. он прошел регистрацию от Сидорова, а Сидоров от меня. Поэтому мне id Сидорова записалось в колонку two_level. Если сидоров позовет еще кого-та тогда заполнится заполнится у меня колонка three_level. Эта цепочка проходит только до seven_level, дальше уже не надо.

Натолкните на мысль как все это написать? Так от готового примера не откожусь т.к. всю голову уже сломал думая об этом.

Вот что есть на данный момент
PHP:
скопировать код в буфер обмена
  1.  
  2. $user_id = $db->insert_id();
  3.                
  4. $parent = $db->super_query("SELECT * FROM partner WHERE id='{$idNum}'");
  5.                
  6. if($parent['one_level'] != '') $one_level = $parent['one_level'].','.$user_id; else $one_level = $user_id;
  7.                
  8. $db->super_query("UPDATE partner SET one_level='{$one_level}' WHERE id='{$idNum}'");
  9.                
  10. $db->query("INSERT INTO partner (start_user, one_level) VALUES('{$idNum}','{$idNum}')");
  11.  
2. Vladimir Kheifets - 16 Апреля, 2018 - 10:14:59 - перейти к сообщению
kuller пишет:
Доброго времени суток!
Помогите пожалуйста решить задачку. На словах вроде все понятно и просто, но на деле возникает много сложностей.
Есть обычная регистрация на сайте с рефиральной системой т.е. человек может по своейреферальной ссылке пригласить другого человека.
................................ .........
Как видим из таблицы есть следуюшие колонки two_level, three_level, four_level и т.к. до seven_level. В каждую эту колонку должны записаться id от моих приглашенных.
................................ ..........

Добрый день!
Смущает фиксированное количество level.
Вдруг, через пару лет понадобится level_eight?
Может быть сделать такую структуру:
1. id
2. start_user
3. level_number
4. ref_user


Удачи!
3. andrewkard - 16 Апреля, 2018 - 11:58:19 - перейти к сообщению
kuller пишет:
Пример:
я дал ссылку Сидорову
Сидоров дал ссылку Иванову

они как то отличаются? эти ссылки
4. kuller - 16 Апреля, 2018 - 14:53:45 - перейти к сообщению
andrewkard пишет:
они как то отличаются? эти ссылки


ссылка вид имеет примерно следующий site.ru/registration/1 в конце ссылки указывается id человека кто дал ссылку.
(Добавление)
andrewkard пишет:
Добрый день!
Смущает фиксированное количество level.
Вдруг, через пару лет понадобится level_eight?
Может быть сделать такую структуру:
1. id
2. start_user
3. level_number
4. ref_user

Удачи!


level_eight точно не нужен будет. ref_user это значение записывается в start_user
5. kuller - 16 Апреля, 2018 - 15:36:29 - перейти к сообщению
Практически получилось написать, но код не очень вышел...

PHP:
скопировать код в буфер обмена
  1.  
  2. $user_id = $db->insert_id();
  3.  
  4. $parent = $db->super_query("SELECT * FROM partner  WHERE id='{$idNum}'");
  5.                
  6. if($parent['one_level'] != '') $one_level = $parent['one_level'].','.$user_id; else $one_level = $user_id;
  7.  
  8. //$structure_info - обычный масив с анологичными даннами из базы.
  9. if($structure_info[$idNum]['one_level'] != '') $two_level = $structure_info[$idNum]['one_level'].','.$user_id; else $two_level = $user_id;
  10.  
  11. if($structure_info[$parent['start_user']]['two_level'] != '') $three_level = $structure_info[$parent['start_user']]['two_level'].','.$user_id; else $three_level = $user_id;
  12.  
  13. if($structure_info[$parent['start_user']]['two_level'] != '') $four_level = $structure_info[$parent['start_user']]['two_level'].','.$user_id; else $four_level = $user_id;
  14.  
  15. if($parent['one_level'] != '') $five_level = $parent['one_level'].','.$user_id; else $five_level = $user_id;
  16.  
  17. if($structure_info[$idNum]['one_level'] != '') $six_level = $structure_info[$idNum]['one_level'].','.$user_id; else $six_level = $user_id;
  18.  
  19. if($structure_info[$idNum]['one_level'] != '') $seven_level = $structure_info[$idNum]['one_level'].','.$user_id; else $seven_level = $user_id;
  20.  
  21. $db->super_query("UPDATE partner SET one_level='{$one_level}' WHERE id='{$idNum}'");
  22. $db->super_query("UPDATE partner SET two_level='{$two_level}' WHERE id='{$parent['start_user']}'");
  23.  
  24. $db->super_query("UPDATE partner SET three_level='{$three_level}' WHERE id='{$structure_info[$parent['start_user']]['start_user']}'");
  25. $db->super_query("UPDATE partner SET four_level='{$four_level}' WHERE id='{$structure_info[$parent['start_user']-1]['start_user']}'");
  26. $db->super_query("UPDATE partner SET five_level='{$five_level}' WHERE id='{$structure_info[$parent['start_user']-2]['start_user']}'");
  27. $db->super_query("UPDATE partner SET six_level='{$six_level}' WHERE id='{$structure_info[$parent['start_user']-3]['start_user']}'");
  28. $db->super_query("UPDATE partner SET seven_level='{$seven_level}' WHERE id='{$structure_info[$parent['start_user']-4]['start_user']}'");
  29.  
  30. $db->query("INSERT INTO partner (start_user, one_level) VALUES('{$idNum}','')");
  31.  
  32. if(file_exists(SYSTEM_DIR . '/cache/system/structure.php'))
  33. {
  34.         unlink(SYSTEM_DIR . '/cache/system/structure.php');
  35. }
  36.  


Данный код работает до определенного момента. Когда запись проходит от id 9 здесь запись ломается. Именно на id 3 затирается two_level должно быть 5,10. Пишет только последнее значение. Если запись производить от id 10 тогда затираться уже будет two_level и three_level и т.д.
6. DFX - 16 Апреля, 2018 - 20:53:36 - перейти к сообщению
На мой взгляд, если будет LVL 100 ты с ума сойдешь) Изучай NESTED TABLES, вложенные таблицы!
7. kuller - 17 Апреля, 2018 - 12:04:33 - перейти к сообщению
DFX пишет:
На мой взгляд, если будет LVL 100 ты с ума сойдешь)


в данном случае не идет вопрос о 100 уровней. Больше семи не может быть. А ошибка в коде получается даже не в том случае который я описал ранее. Она возникает с 15 человека, а до него все четко работает. Можно делать записи в любом порядке, и все нормально. Интересно становится почему же с 15го человека происходит сбой.
8. kuller - 18 Апреля, 2018 - 20:26:46 - перейти к сообщению
добрые люди и желающие заработать... помогите пожалуйста написать эту систему.

P.S.
если желание заработать - напишите мне в ЛС на форуме.
просто помочь - в тему.

Заранее спасибо!

 

Powered by ExBB FM 1.0 RC1