Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera preciso fazer sistema tipo downline, ou seja tem que mostrar niveis de usuarios que se cadastraram atravez de outros usuarios, tipo um ligado no outro e eu tenho que mostrar quantas pessoas estao em cada nivel ou seja tem que mostrar o total de registro.
<table width="477" border="1" align="center">
<tr>
<td width="55">Nome</td>
<td width="266"> </td>
</tr>
<tr>
<td align="center">Nivel</td>
<td align="center">Quantidade</td>
</tr>
<tr>
<td>3º</td>
<td>
<?php
$bd = mysql_query("SELECT id_usu, nome, senha, usu_de FROM usuarios where usu_de = '1'");
while($linha = mysql_fetch_array($bd))
{
$id = $linha['id_usu'];
?>
<? $bd2 = mysql_query("SELECT id_usu, nome, senha, usu_de, count(nome) as quant FROM usuarios group by nome");
while($linha2 = mysql_fetch_array($bd2))
if($linha2['usu_de'] == $id){ $quant = $linha2['quant']; ?>
<a href="prop.php?id_usu=<?php echo $linha2['id_usu']; ?>"><?php echo $linha2['nome']; ?></a> <? }?><? }?> </td>
</tr>
<tr>
<td><?php echo $quant ?></td>
<td>mmm</td>
</tr>
<tr>
<td>5º</td>
<td> </td>
</tr>
<tr>
<td>6º</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
aparece apenas o "1" ele ta contando apena os ultimos usuarios cadastrados do ultimo usuario
galera qual a saída?
desde já agradeço
>
Não sei se percebi muito bem...
Usuário 1
-> Usuário 2
-> Usuário 3
----> Usuário 4
----> Usuário 5
Portanto, o usuário 1 convidou o 2, 3, 4 e 5
O usuário 2 não convidou ninguém, o 3 convidou o usuário 4 e5
Você quer contar quantos usuários cada um convidou?
Usuário 1 (4)
Usuário 2 (0)
Usuário 3 (2)
Usuário 4 (0)
Usuário 5 (0)
Tipo isso?
Para isso você terá de ter na tabela de usuários ter um campo para armazenar quem convidou quem...
Depois disso poderá criar um ciclo e contar os usuários ou então, sempre que alguém se regista incrementar +1 nesse campo de cada um dos usuários.
Vou explicar:
O usuário 3 vai convidar mais 1 portanto ele fica com 1 na row dele e o usuário 1 fica também com +1, penso que desta maneira seja melhor e mais eficaz pois irá consumir menos recursos durante a consulta e será também mais fácil de fazer =)
Olá SnakeX,ñ é assim como você disse.
É assim:
Eu convidei Marcelo e Elizete. ai tem q contat 2
Elizete convidou 3 pessoas e Marcelo 3. então tem q contar 6 e assim por diante
valeu!
É exactamente como eu disse:
Usuário 1 (4) <-- CONVIDOU 4
--> Usuário 2 (0) <-- CONVIDOU 0
--> Usuário 3 (2) <-- CONVIDOU 2
----> Usuário 4 (0) <-- CONVIDOU 0
----> Usuário 5 (0) <-- CONVIDOU 0
------
Edit: Ahh você não quer contar os subniveis.....
Qual é o campo que você esta a armazenar para saber quem convidou quem?
>
É exactamente como eu disse:
Usuário 1 (4) <-- CONVIDOU 4
--> Usuário 2 (0) <-- CONVIDOU 0
--> Usuário 3 (2) <-- CONVIDOU 2
----> Usuário 4 (0) <-- CONVIDOU 0
----> Usuário 5 (0) <-- CONVIDOU 0
------
Edit: Ahh você não quer contar os subniveis.....
Qual é o campo que você esta a armazenar para saber quem convidou quem?
Verdade você ta certo, mas ja tenho um campo para indicar quem indica quem, mas eu ñ to conseguindo fazer a contagem de indicados por niveis pelo "COUNT()" do SQL
o campo que ta indicando quem pega o usuario é: usu_de ai ele pega o id_usu do usuario que o indicou
Pode usar algo como:
$bd2 = mysql_query("SELECT `id_usu` FROM `usuarios WHERE `usu_de`='".$id."'");
$quant = mysql_num_rows($bd2);
Atenção ao WHERE pois eu não sei qual é o campo que você está a armazenar os indicado, mas seria algo assim, não precisa criar ciclo já que é só isso..
>
Pode usar algo como:
$bd2 = mysql_query("SELECT `id_usu` FROM `usuarios WHERE `usu_de`='".$id."'");
$quant = mysql_num_rows($bd2);
Atenção ao WHERE pois eu não sei qual é o campo que você está a armazenar os indicado, mas seria algo assim, não precisa criar ciclo já que é só isso..
Já fiz isso e fez a mesma coisa do COUNT(*)
E que valor está a armazenar nesse campo?
E todos os convidados tem quem convidou guardado nesse campo?
>
E que valor está a armazenar nesse campo?
E todos os convidados tem quem convidou guardado nesse campo?
o valor armazenado nesse campo é numero 1,2,3,4,5 e assim por diantesim todos convidados tem quem o convidou pelo campo usu_de
Será que pode postar aqui a tabela MySQL para eu testar, é que não estou a perceber o que está a falhar =\
>
Será que pode postar aqui a tabela MySQL para eu testar, é que não estou a perceber o que está a falhar =\
-- phpMyAdmin SQL Dump-- version 2.10.1
--
-- Servidor: localhost
-- Tempo de Geração: Jul 10, 2010 as 07:18 PM
-- Versão do Servidor: 5.0.45
-- Versão do PHP: 5.2.5
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Banco de Dados: mmn
--
-- --------------------------------------------------------
--
-- Estrutura da tabela usuarios
--
CREATE TABLE `usuarios` (
`id_usu` int(11) NOT NULL auto_increment,
`nome` varchar(90) NOT NULL,
`senha` varchar(50) NOT NULL,
`usu_de` varchar(30) NOT NULL,
PRIMARY KEY (`id_usu`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;
--
-- Extraindo dados da tabela usuarios
--
INSERT INTO usuarios (id_usu, nome, senha, usu_de) VALUES
(1, 'Marcos', '123', '0'),
(2, 'Marcelo', '123', '1'),
(3, 'Elizete', '123', '1'),
(4, 'jose', '123', '2'),
(5, 'carlos', '123', '2'),
(6, 'Claudio', '123', '3'),
(7, 'Ana', '123', '3'),
(8, 'taty', '123', '3'),
(9, 'tote', '123', '2'),
(10, 'Lucas', '123', '1'),
(11, '', '', ''),
(12, 'Pedro', '123', '10'),
(13, 'tevis', '123', '8');
<?php
$con = mysql_connect('localhost', 'glazz', 'teste');
$sel = mysql_select_db('teste');
?>
<table width="477" border="1" align="center">
<tr>
<td width="55">Nome</td>
<td align="center">Quantidade</td>
</tr>
<?php
$bd = mysql_query("SELECT * FROM usuarios");
while($linha = mysql_fetch_array($bd))
{
$bd2 = mysql_query("SELECT `id_usu` FROM `usuarios` WHERE `usu_de`='".$linha['id_usu']."'", $con);
$qt_t = mysql_num_rows($bd2);
?>
<tr>
<td><?php echo $linha['nome']; ?></td>
<td><?php echo $qt_t; ?></td>
</tr>
<?php
}
?></table>
O código está algo diferente do seu...Uma idéia seria você armazenar tudo num array multidimensional. Cada nova dimensão representaria o nível de indicação ou, no seu caso, outros "uns".
Depois usaria count() com a flag COUNT_RECURSIVE. O resultado seria uma contagem recursiva a partir do índice que você indicar:
$test = array( 'John' => array( 'Mary' => array( 'Peter' => array( 'Clark' => 1, 'Jonathan' => 1 ), 'Henry' => 1, 'Sarah' => 1 ) ) );
print count( $test['John'], COUNT_RECURSIVE ); // 4
print count( $test['John']['Mary']['Peter'], COUNT_RECURSIVE ); // 2
>
<?php
$con = mysql_connect('localhost', 'glazz', 'teste');
$sel = mysql_select_db('teste');
?>
<table width="477" border="1" align="center">
<tr>
<td width="55">Nome</td>
<td align="center">Quantidade</td>
</tr>
<?php
$bd = mysql_query("SELECT * FROM usuarios");
while($linha = mysql_fetch_array($bd))
{
$bd2 = mysql_query("SELECT `id_usu` FROM `usuarios` WHERE `usu_de`='".$linha['id_usu']."'", $con);
$qt_t = mysql_num_rows($bd2);
?>
<tr>
<td><?php echo $linha['nome']; ?></td>
<td><?php echo $qt_t; ?></td>
</tr>
<?php
}
?></table>
O código está algo diferente do seu...
Aqui deu erroWarning: mysql_query(): supplied argument is not a valid MySQL-Link resource in
indicando essas linhas
$bd2 = mysql_query("SELECT `id_usu` FROM `usuarios` WHERE `usu_de`='".$linha['id_usu']."'", $con);
$qt_t = mysql_num_rows($bd2);
deu certo ai com você?
retire o , $con da query e veja se dá..
>
retire o , $con da query e veja se dá..
funcionou mas ele conta de todos vou tentar adequar ao que eu preciso.se você conseguir posta eu agradeço.
tentei e fiquei no mesmo lugar ñ deu pra contar da forma q eu quero
Desculpe mas ~sei como fazer isso, armazenar em um array, como sabera as indicações?
Uma vez tendo a estrutura como demonstrei, basta você adicionar +1 ao valor de quem indicar.
Nesse exemplo de estrutura, se você fizer:
$test['John']['Mary']['Peter'] += 5
A saída será 7 pois Peter já indicou outras 5 pessoas, além das 2 que já havia indicado.
Lembre-se que a "estrutura em array", não precisa ser um array manual. Pode vir via banco de dados também. /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/wink.gif&key=0566fd943552bcff9cb1b879403ca34b5ff8f67befaac7fe4648006e9f764689" alt="Imagem Postada" />
Não sei se percebi muito bem...
Usuário 1
-> Usuário 2
-> Usuário 3
----> Usuário 4
----> Usuário 5
Portanto, o usuário 1 convidou o 2, 3, 4 e 5
O usuário 2 não convidou ninguém, o 3 convidou o usuário 4 e5
Você quer contar quantos usuários cada um convidou?
Usuário 1 (4)
Usuário 2 (0)
Usuário 3 (2)
Usuário 4 (0)
Usuário 5 (0)
Tipo isso?
Para isso você terá de ter na tabela de usuários ter um campo para armazenar quem convidou quem...
Depois disso poderá criar um ciclo e contar os usuários ou então, sempre que alguém se regista incrementar +1 nesse campo de cada um dos usuários.
Vou explicar:
O usuário 3 vai convidar mais 1 portanto ele fica com 1 na row dele e o usuário 1 fica também com +1, penso que desta maneira seja melhor e mais eficaz pois irá consumir menos recursos durante a consulta e será também mais fácil de fazer =)