Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Интересная и сложная задачка...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
kuller
Отправлено: 16 Апреля, 2018 - 04:37:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




Доброго времени суток!

Помогите пожалуйста решить задачку. На словах вроде все понятно и просто, но на деле возникает много сложностей.
Есть обычная регистрация на сайте с рефиральной системой т.е. человек может по своейреферальной ссылке пригласить другого человека. В базе создал таблицу в которую должны записаться 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.  

Прикреплено изображение (Нажмите для увеличения)
1.jpg

(Отредактировано автором: 16 Апреля, 2018 - 04:42:45)

 
 Top
Vladimir Kheifets
Отправлено: 16 Апреля, 2018 - 10:14:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




kuller пишет:
Доброго времени суток!
Помогите пожалуйста решить задачку. На словах вроде все понятно и просто, но на деле возникает много сложностей.
Есть обычная регистрация на сайте с рефиральной системой т.е. человек может по своейреферальной ссылке пригласить другого человека.
................................ .........
Как видим из таблицы есть следуюшие колонки two_level, three_level, four_level и т.к. до seven_level. В каждую эту колонку должны записаться id от моих приглашенных.
................................ ..........

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


Удачи!
 
 Top
andrewkard
Отправлено: 16 Апреля, 2018 - 11:58:19
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




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

они как то отличаются? эти ссылки
 
 Top
kuller
Отправлено: 16 Апреля, 2018 - 14:53:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




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
 
 Top
kuller
Отправлено: 16 Апреля, 2018 - 15:36:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




Практически получилось написать, но код не очень вышел...

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 и т.д.
Прикреплено изображение (Нажмите для увеличения)
3.jpg

(Отредактировано автором: 16 Апреля, 2018 - 15:42:40)

 
 Top
DFX
Отправлено: 16 Апреля, 2018 - 20:53:36
Post Id


Гость


Покинул форум
Сообщений всего: 75
Дата рег-ции: Апр. 2007  


Помог: 0 раз(а)




На мой взгляд, если будет LVL 100 ты с ума сойдешь) Изучай NESTED TABLES, вложенные таблицы!
 
 Top
kuller
Отправлено: 17 Апреля, 2018 - 12:04:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




DFX пишет:
На мой взгляд, если будет LVL 100 ты с ума сойдешь)


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



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




добрые люди и желающие заработать... помогите пожалуйста написать эту систему.

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

Заранее спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB