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]   

> Без описания
Рачей
Отправлено: 29 Января, 2016 - 21:38:20
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




Думаю на сайте сделать партнерку, сижу думаю как их считать.. До какого уровня? Как обычно высчитываются, у кого опыт есть? Там еще до второго третьего уровня не сложно, а если их будет от первого до последнего 30 уровней... Как быть? Составлять дерево или при совершении действия крайнего пользователя пересчитывать все до первого уровня? Поделитесь опытом.
 
 Top
Prizma
Отправлено: 29 Января, 2016 - 22:20:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


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




Рачей пишет:
Думаю на сайте сделать партнерку, сижу думаю как их считать.. До какого уровня? Как обычно высчитываются, у кого опыт есть? Там еще до второго третьего уровня не сложно, а если их будет от первого до последнего 30 уровней... Как быть? Составлять дерево или при совершении действия крайнего пользователя пересчитывать все до первого уровня? Поделитесь опытом.

Конкретно с партнеркой дело не имел, но с многоуровневыми зависимыми данными возился..

тут всё просто отмечаешь, кто чей реферал и при возникновении события за которым должно последовать вознаграждение до требуемого "колена" циклично начисляешь "бонусы" всё просто..

я бы как то так сделал:
PHP:
скопировать код в буфер обмена
  1. $userId = 115; // id реферала
  2. $k = [0.2,0.05, 0.0125 ...]; // коэффициент
  3. function getParent($userId) {
  4.     /* ... */
  5.         return $parentId;
  6. }
  7. $i = 0;
  8. while((($p = getParent($userId)) > 0) || ($i >= count($k))) {
  9.     echo sprintf('Пользователю %s получит вознаграждение в размере %.4F%% от пользователя %s',
  10.         $p, $k[$i]*100, $userId);
  11.     $i++;
  12. }
  13.  
 
My status
 Top
Рачей
Отправлено: 29 Января, 2016 - 23:10:27
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




Спасибо, я так и предполагал что надо при действии крайнего пробежаться по цепочке вверх до первого и всем накинуть.. Осталось придумать кто сколько имеет в зависимости от уровня.. и тут еще момент что чем глубже уровень, тем меньше процент наверное... Точнее сколько нижний будет отдавать на верх что бы это все на всех поделить в процентном соотношении..
В принципе ваша идея мне понятна, но мне кажется, поправьте если ошибаюсь, тут с коэфицентами надо поработать.. У вас они задаются железно.. А надо наверное их создавать под каждого юзера в зависимости от вложенности.. То есть есть уровень вложенности и на него надо поделить сумму отдачи процента пользователя выстроив в какой-то прогрессии.
Не, гоню? Или как?
(Добавление)
Теперь бы еще придумать откуда брать бонусы на партнеров вверх.. Закладывать в цену рекламодателя? тут надо крепко будет подумать. Вообщем теория мне ясна... Еще пару часов назад я даже представления не имел как это сделать.. А сейчас уже даже знаю как я это реализую.

СпасибоУлыбка
 
 Top
Prizma
Отправлено: 29 Января, 2016 - 23:42:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


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




Рачей пишет:
В принципе ваша идея мне понятна, но мне кажется, поправьте если ошибаюсь, тут с коэфицентами надо поработать.. У вас они задаются железно.. А надо наверное их создавать под каждого юзера в зависимости от вложенности.. То есть есть уровень вложенности и на него надо поделить сумму отдачи процента пользователя выстроив в какой-то прогрессии.
Не, гоню? Или как?

Вообще то массив коэффициентов для того и нужен чтобы в нем определить бонусы для всех уровней и количество этих уровней.
$i - определяет уровень вложенности,
$k[$i] - коэффициент для данного уровня,
count($k) - количество уровней
Рачей пишет:
Теперь бы еще придумать откуда брать бонусы на партнеров вверх.. Закладывать в цену рекламодателя? тут надо крепко будет подумать.

тут всё просто на самом деле, определить одну цифру:
со сколькими % готов расстаться - допустим это Х
а далее делаешь так:
1) Х/2 отдаешь первому уровню
2) каждый последующий получает в 2 раза меньше т.е. Х/4, Х/8, X/16 и т.д.
3) больше 10 уровней делать думаю смысла нет (т.к. доля % будет слишком ничтожна мала), другой вопрос, что врятли когда нибудь их столько будет - поэтому вообще можно не ограничивать уровни, а разделять до последнего пока сумма допустим не будет меньше копейки. В итоге до 6-8 уровня максимум что еще и дойдет.
(Добавление)
Если решишь реализовывать по этой схеме, тогда сумма издержек на бонусы будет стримится к Х, но никогда не будет больше... собственно поэтому этот Х и надо определить ;)
 
My status
 Top
Рачей
Отправлено: 30 Января, 2016 - 11:09:21
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




Да примерно так, спасибо. Жаль кнопку спасибо нажать не могу, говорит сообщений мало. Сколько же их надо набрать и смысл в этом наборе...

Мне не совсем понятно зачем тут (($p = getParent($userId)) > 0)
больше нуля? Оно может быть равно или меньше?

и тут
$k = [0.2,0.05, 0.0125 ...]; // коэффициент
если тут он руками задан руками...
 
 Top
Prizma
Отправлено: 30 Января, 2016 - 12:01:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


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




Рачей пишет:
Да примерно так, спасибо. Жаль кнопку спасибо нажать не могу, говорит сообщений мало. Сколько же их надо набрать и смысл в этом наборе...

Мне не совсем понятно зачем тут (($p = getParent($userId)) > 0)
больше нуля? Оно может быть равно или меньше?

и тут
$k = [0.2,0.05, 0.0125 ...]; // коэффициент
если тут он руками задан руками...

Я исходил из того, что функция getParent селектит из базы данных id пользователя который пригласил этого пользователя. Результат записываем в $p, однако если учесть, что пользователя возможно некто не пригласил, тогда функция getParent вернет 0, и цикл прервется т.к. дойдет до логического предела цепочки.

Ну в первом примере коэффициент задан руками для каждого уровня, однако вместо этого можно сделать, как я описал в предыдущем посте:
PHP:
скопировать код в буфер обмена
  1. $userId = 115; // id реферала
  2. function getParent($userId) {
  3.     /* ... */
  4.     return $parentId;
  5. }
  6. $i = 0;
  7. $k = 0.1; // 10%
  8. $s = 30; // число от которого считать бонусы допустим в рублях
  9. while(($p = getParent($userId)) > 0) {
  10.     $k /= 2;
  11.     $bonus = $s*$k; // в руб.
  12.     if($bonus < 0.01) {
  13.         break; // если сумма меньше одной копейки прерываем цикл т.к. считать уже нечего
  14.     }
  15.     echo sprintf('Пользователю %s получит вознаграждение в размере %.2F%% от пользователя %s',
  16.         $p, $bonus, $userId);
  17.     // обновляем данные для следующего уровня
  18.     $userId = $p;
  19.     $s = $bonus;
  20.     $i++;
  21. }
  22.  

(Отредактировано автором: 30 Января, 2016 - 12:04:20)

 
My status
 Top
Рачей
Отправлено: 31 Января, 2016 - 00:00:32
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




Да вот это хорошее решение. Спасибо. Думаю не только мне пригодится. Кстати гугл не охотно показывает что-либо по этой теме.

Когда же мне можно будет нажать кнопку спасибо?Улыбка Пофлудить чтоль пойти по форуму?Улыбка))
 
 Top
Prizma
Отправлено: 31 Января, 2016 - 07:05:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


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




Рачей пишет:
Да вот это хорошее решение. Спасибо. Думаю не только мне пригодится. Кстати гугл не охотно показывает что-либо по этой теме.

Когда же мне можно будет нажать кнопку спасибо? Пофлудить чтоль пойти по форуму?))

Да фигня всё это, пару лет назад - мне тоже помогали тут, считай возвращаю должок))
 
My status
 Top
Рачей
Отправлено: 31 Января, 2016 - 15:08:04
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




Prizma пишет:
пару лет назад - мне тоже помогали тут, считай возвращаю должок))


Я намек понялУлыбка) Надеюсь дорасту до уровняУлыбка)
 
 Top
T1grOK
Отправлено: 31 Января, 2016 - 21:32:10
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


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




Prizma пишет:
Я исходил из того, что функция getParent селектит из базы данных id пользователя который пригласил этого пользователя.

Да ну нафиг.
При решении данной задачи очень кстати использовать вложенные множества.


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
Рачей
Отправлено: 01 Февраля, 2016 - 23:01:49
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


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




T1grOK пишет:
При решении данной задачи очень кстати использовать вложенные множества.


Так предложите вариант.

(Отредактировано автором: 01 Февраля, 2016 - 23:02:10)

 
 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