Mostrar indicados com níveis
É o seguinte, estou fazendo um sistema, onde usuários são cadastrados a partir de indicados (usuários que fizeram a indicação), e isso acontece em hierarquia. Ou seja, cada usuário uma árvore de indicados, que são indicados, indicados de indicados, etc (cinco níveis). É um pouco difícil de explicar, vou tentar fazer um exemplo:
>
Carlos começa no nível 1, Rodrigo cadastrou-se com o link dele, então Carlos vai ter Rodrigo no nível 2. Rodrigo indicou o link para Fernando e Jessica, que se cadastram também, e assim Rodrigo vai ter Fernando e Jessica no nível 2 e Carlos vai ter Rodrigo no nível 2 e Fernando e Jessica no nível 3:
Cadastros de Carlos
Nível 1: eu mesmo
Nível 2: 1 usuário (Rodrigo)
Nível 3: 2 usuários (Fernando e Jessica)
Cadastros de Rodrigo
Nível 1: eu mesmo
Nível 2: 2 usuários (Fernando e Jessica)
Cadastros de Fernando
Nível 1: eu mesmo
Cadastros de Jessica
Nível 1: eu mesmo
Quando eu listar os indicados de Carlos, vou obter 3, quando listar os de Rodrigo vou obter 2, ou outros nenhum.
A tabela usuários tem um campo para o indicado. Quero procurar os indicados de indicados e etc(cinco níveis) de cada usuário, utilizando o PHP.
Fiz o seguinte código:
$stmt = $conn->prepare('SELECT * FROM usuarios WHERE id_indicado = :id_indicado');
$stmt->execute(array('id_indicado' => $p1));
$result = $stmt->fetchAll();
$niveis[0] = count($result);
for ($i = 0; $i < count($result); $i++) {
$stmt1 = $conn->prepare('SELECT * FROM usuarios WHERE id_indicado = :id_indicado');
$stmt1->execute(array('id_indicado' => $result[$i]['id']));
$result1 = $stmt1->fetchAll();
$niveis[1] = count($result1);
}
for ($i = 0; $i < count($result1); $i++) {
$stmt2 = $conn->prepare('SELECT * FROM usuarios WHERE id_indicado = :id_indicado');
$stmt2->execute(array('id_indicado' => $result1[$i]['id']));
$result2 = $stmt2->fetchAll();
$niveis[2] = count($result2);
}
for ($i = 0; $i < count($result2); $i++) {
$stmt3 = $conn->prepare('SELECT * FROM usuarios WHERE id_indicado = :id_indicado');
$stmt3->execute(array('id_indicado' => $result2[$i]['id']));
$result3 = $stmt3->fetchAll();
$niveis[3] = count($result3);
}
return $niveis;
*/applications/core/interface/imageproxy/imageproxy.php?img=http://snap.ashampoo.com/uploads/2015-09-26/QRO3Huc9.png&key=5d98ae94dbe982ee83a7c88d01052ff06c8abf67ca664742d8c0f8a1c8dc07d0" alt="QRO3Huc9.png" />
Ele está retornando assim:
array (size=4)*
0 => int 1
1 => int 2
2 => int 1
3 => int 0
O correto é o nível 2 receber 2 também, para a soma ser correta.
Os níveis na verdade não são importantes, só preciso da soma deles.
Podem me ajudar? Obrigado e aguardo.
Discussão (0)
Carregando comentários...