Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

videfrancisco

Somar campos de usuários distintos com hierarquia

Recommended Posts

Boa noite pessoal,

Estou precisando fazer uma soma vindo do banco de dados:

Tenho a tabela afiliados que tem os campos comjan, comfev, commar e assim respectivamente todos os meses do ano.

Eu tenho um select distinct que me diz o numero de indicados cadastrado abaixo do afiliado indo até o 5 nivel.

Eu irei todo mes lançar os valores de cada indicado no campo correspondente ao mês.

E preciso de uma função para somar esses valores para o afiliado master que será até o 5 nivel.

Exemplo: AFILIADO 1 indicou 2 pessoas que indicaram mais 2 cada que indicaram mais 1 cada 1 e asism por diante até o 5 nivel.

Eu preciso puxar esses valores e somar eles para exibir pro afiliado master.

 

Código que fiz para somar os afiliados com hierarquia

------------

$sql = 'SELECT count(distinct t1.email) AS lev1,
count(distinct t2.email) as lev2,
count(distinct t3.email) as lev3,
count(distinct t4.email) as lev4,
count(distinct t5.email) as lev5,
count(distinct t6.email) as lev6
FROM oc_affiliate AS t1
LEFT JOIN oc_affiliate AS t2 ON t2.affiliate_referral = t1.affiliate_id
LEFT JOIN oc_affiliate AS t3 ON t3.affiliate_referral = t2.affiliate_id
LEFT JOIN oc_affiliate AS t4 ON t4.affiliate_referral = t3.affiliate_id
LEFT JOIN oc_affiliate AS t5 ON t5.affiliate_referral = t4.affiliate_id
LEFT JOIN oc_affiliate AS t6 ON t6.affiliate_referral = t5.affiliate_id
WHERE t1.affiliate_id = 8';

mysql_select_db('fxc_chrome');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}

while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo
"level 1: " . $row['lev2']." <br> ".
"level 2: " . $row['lev3']. "<br> ".
"level 3: " . $row['lev4']. "<br> ".
"level 4: " . $row['lev5']. "<br> ".
"level 5: " . $row['lev6']. "<br> ".

 

----------------------

 

Preciso pegar esses indicados de hierarquia e somar os campos de comissao do mes e exibir

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para alguem poder te ajudar seria bom vc postar a estrutura da tabela oc_affiliate, bem como as tabelas que contenham os valores de comissao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa havia esquecido, vlw

 

tabela.png

 

Fiz esse query abaixo porem o resultado ta dando errado ele parece ta duplicando algum valor

 

$sql = 'SELECT SUM(t1.comjan) AS lev1,

SUM(t2.comjan) as lev2,

SUM(t3.comjan) as lev3,

SUM(t4.comjan) as lev4,

SUM(t5.comjan) as lev5,

SUM(t6.comjan) as lev6

FROM oc_affiliate AS t1

LEFT JOIN oc_affiliate AS t2 ON t2.affiliate_referral = t1.affiliate_id

LEFT JOIN oc_affiliate AS t3 ON t3.affiliate_referral = t2.affiliate_id

LEFT JOIN oc_affiliate AS t4 ON t4.affiliate_referral = t3.affiliate_id

LEFT JOIN oc_affiliate AS t5 ON t5.affiliate_referral = t4.affiliate_id

LEFT JOIN oc_affiliate AS t6 ON t6.affiliate_referral = t5.affiliate_id

WHERE t1.affiliate_id = 8 ';

 

ta retornando esses valores: http://www.fxchrome.com/teste2.php

 

TOTAL 40 sendo que seria o correto 30 e demais niveis tb ta duplicando algum valor

 

 

Opa boa tarde, alguém poderia dar essa ajuda?

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

a duplicação ocorre por conta da "abertura" das tabelas em produto cartesino.Como assim?

 

Vamos olhar a sua tabela...

 

8-51

8-50

8-49

51-54

54-57

 

se a gente faz 5 left joins conforme você propos na consulta, teriamos:

 

 

8-50-53-56-Nulo

8-51-54-57-Nulo

8-49-52-55-58-<59>

8-49-52-55-58-<60>

 

ou seja, o 8-49 será contado duas vezes como combinação de primeiro nivel, dai 40 na soma.

 

Sendo assim eu talvez executasse a consulta em niveis...

 

 

OBS: Esquema de piramide/jogo do avião é crime :x

Compartilhar este post


Link para o post
Compartilhar em outros sites

a duplicação ocorre por conta da "abertura" das tabelas em produto cartesino.Como assim?

 

Vamos olhar a sua tabela...

 

8-51

8-50

8-49

51-54

54-57

 

se a gente faz 5 left joins conforme você propos na consulta, teriamos:

 

 

8-50-53-56-Nulo

8-51-54-57-Nulo

8-49-52-55-58-<59>

8-49-52-55-58-<60>

 

ou seja, o 8-49 será contado duas vezes como combinação de primeiro nivel, dai 40 na soma.

a duplicação ocorre por conta da "abertura" das tabelas em produto cartesino.Como assim?

 

Vamos olhar a sua tabela...

 

8-51

8-50

8-49

51-54

54-57

 

se a gente faz 5 left joins conforme você propos na consulta, teriamos:

 

 

8-50-53-56-Nulo

8-51-54-57-Nulo

8-49-52-55-58-<59>

8-49-52-55-58-<60>

 

ou seja, o 8-49 será contado duas vezes como combinação de primeiro nivel, dai 40 na soma.

 

Sendo assim eu talvez executasse a consulta em niveis...

 

 

OBS: Esquema de piramide/jogo do avião é crime :x

Opa reduzi aqui a consulta mas tb não deu certo agora qnd alguém entra no nivel 3 ele duplica o resultado do nivel 1

 

:(

 

 

Como faço para não repetir esses niveis? :/

 

 

Sobre a questão de piramide esse sistema paga comissões apenas para os gerentes de cada pais, teremos apenas afiliados comum indicacao direta 1 nivel. demais niveis vai ser apenas para quem for cuidar do escritorio da empresa em cada país.

 

 

Alguém?

Compartilhar este post


Link para o post
Compartilhar em outros sites

lol

 

o fato é que vc precisa fazer a consulta em camadas e depois agregar os dados.

#Nivel 1
Select distinct afiliate_id from oc_affiliate where affiliate_referal in (8)
#Nivel 2
Select distinct afiliate_id from oc_affiliate where affiliate_referal 
in
(select in (Select distinct afiliate_id from oc_affiliate where affiliate_referal in (8))
#Nivel 3

Select distinct afiliate_id from oc_affiliate where affiliate_referal
in
(Select distinct afiliate_id from oc_affiliate where affiliate_referal
in
​(select in (Select distinct afiliate_id from oc_affiliate where affiliate_referal in (8)))

e assim sucessivamente. Talvez a consulta fique extremamente lenta a partir do terceiro nível. Um indice na coluna pode ajudar,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.