Домой Каталог: Дополнения WP-Recall Partners System Про подсчёт количества рефералов в парнерке
15ответ(ов) в теме
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
1
22:53

Доброго времени суток.
Или плохо искал, или нет такой темы.

Вопрос таков:
Имеем партнерку на 10 уровней. Задача посчитать общее количество рефералов у одного парнера. Например у меня

Вы не можете просматривать опубликованные ссылки

(нажмите Посмотреть реферальное дерево) Рефералы в первой линии я сосчитать могу. Но с расчетом общего количества, что-то я подтупливаю. Как этот цикл в функции на РНР написать? Или на JS, не важно. Важно получить цифру.

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
2
23:02

запрос на получение кол-ва рефералов конкретного юзера:

$count = $wpdb->get_var("SELECT COUNT(ID) FROM ".WP_PREFIX."prt_partners WHERE partner="'$user_id'");

$user_id - ИД нужного пользователя

1
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
3
23:09

Отлично! Спасибо 🙂

Теперь та же задача еще раз, но другими словами:
У меня 3 реферала первой линии. Мы их сосчитали по Вашему методу, о чем я писал в своем первом посте. Идем дальше....
У меня есть рефералы 1,2 и 3.
У реферала 1 есть свои 2 реферала и у тех по одному.
У рефералов два и три тоже по одному.

Общее количество рефералов в моей сети 9.
Как мне это посчитать циклом? Может через рефлексию функции? Но я не пойму как мне числа сложить. Через рефлексию функции я получаю в строку набор чисел((( а нужна сумма этих чисел

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
4
23:56

Логика примерно такая, сначала получаете пользователей в своей сети, затем пользователей в сети тех кого получили и тд, зависит от уровня. На выходе вы получаете перечень юзеров, далее делаем запрос к БД на получение кол-ва рефералов у этих юзеров, получаете общее число.

1
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
5
09:19

Спасибо.

Люди, с логикой и теорией у меня все хорошо. Пожалуйста, читайте внимательнее вопрос, чтобы не тратить зоя ваше время. Меня интересует конкретный пример кода. Спасибо 🙂

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
6
12:56

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

function get_referalls_usernet($user_id){
	global $wpdb;	
	$all_ids = array();	

	$ids = $wpdb->get_col("SELECT referal FROM ".WP_PREFIX."prt_partners WHERE partner='$user_id'");
	
	$all_ids = get_referalls_ids($ids);

	return $all_ids;
}

function get_referalls_ids($ids,$all_ids=false){
	global $wpdb;
if(!$all_ids) $all_ids = $ids;

	$refs =  $wpdb->get_col("SELECT referal FROM ".WP_PREFIX."prt_partners WHERE partner IN (".implode(',',$ids).")");
	if($refs){
		$all_ids = array_merge($refs,$all_ids);
		return get_referalls_ids($refs,$all_ids);		
	}
        
	return $all_ids;
}
//Получаем массив всех пользователей в сети определенного юзера
$refs = get_referalls_usernet($user_id);
//Считаем кол-во рефералов в сети пользователя
$cnt = count($refs);

код не тестировал, но думаю, направление тут верное.

2
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
7
13:09

поправил ошибку в первой функции

0
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
8
13:37

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

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
9
13:39

Igor Kikot сказал(а)

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

ошибка? или запрос долгий?
Я ж говорю, не тестировал, ожидать проблем можно.

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
10
13:42

Вторую функцию поправил

0
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
11
13:43

Андрей, очень долгий запрос, который не заканчивается

_UPD:

после всех исправлений выдало, что у юзера 1 реферал. А должно быть 5

0
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
12
13:48

print_r($refs); показал одног реферала на третьем уровне, минуя двоих на превом и одного на втором

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
13
13:52

значит, ошибка в логике, сейчас поправил код еще раз, попробуйте последнюю редакцию

1
Igor Kikot
не в сети 8 лет
На сайте с 23.10.2015
Участник
14
13:58

Все получилось, Андрей! Огромное Вам спасибо!

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16856
15
14:02

Рад, что смог помочь.

0
Тема закрыта. Публикация новых сообщений запрещена.