Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, quero pegar os dados do banco, vejam o codigo abaixo:
$sqlusu=mysql_query("select * from usuarios where afilid='$id'");
while($contausu=mysql_num_rows($sqlusu)){
$sqltran=mysql_query("SELECT * FROM PagSeguroTransacoes where CliEmail='".$contausu["email"]."' and StatusTransacao='Aprovado' or StatusTransacao='Completo'");
}
$contador = mysql_num_rows($sqltran);
echo "$contador <br>";
$valor=($contador*6.45); if ($contador == '0') {echo "R$ 0.00";} else {echo "R$ $valor"; }
Quero que ele some todas as vendas que ele está achando em PagSeguroTransacoes através dos afiliados.O problema é que ele não mostra valor quando não acha nada e mostra 2 vezes o mesmo valor (não soma) ou ele simplesmente só imprime uma vez o valor.
Acredito que seja problema no comando de repetição, mas já tentei um monte de coisa e nada deu certo.
Quem puder me ajudar, agradeço.
Obrigado.
Então amigo, muito obrigado pela ajuda, só que agora está acontecendo uma coisa estranha!
Apenas nas contas que contém dados para puxar, ele trava a página, fica carregando.
Nas que o valor é 0, ele vai certo.
$contador = 0;
$sqlusu=mysql_query("select * from usuarios where afilid = $id");
while($contausu=mysql_num_rows($sqlusu)){
$sqltran = mysql_query("SELECT * FROM PagSeguroTransacoes where CliEmail = '".$contausu["email"]."' and StatusTransacao='Aprovado' or StatusTransacao='Completo'");
$contador+=mysql_num_rows($sqltran);
}
$valor=($contador*6.45);
if ($contador == '0') {
echo "R$ 0.00";
}
else {
echo "R$ ".$valor;
}Tenta assim, quem sabe:
$contador = 0;
$sqlusu=mysql_query('SELECT email FROM usuarios WHERE afilid="'.$id.'"');
while ($contausu=mysql_fetch_array($sqlusu))
{
$sqltran = mysql_query('SELECT count(*) as quant FROM PagSeguroTransacoes where CliEmail="'.$contausu['email'].'" AND (StatusTransacao="Aprovado" OR StatusTransacao="Completo")');
$contatran=mysql_fetch_array($sqlusu);
$contador+= $contatran['quant'];
}
$valor=($contador*6.45);
echo 'R$ '.number_format($valor,2,',','.');
Na realidade bastava você trocar o while($contausu=mysql_num_rows($sqlusu)) por while ($contausu=mysql_fetch_array($sqlusu))
Você estava fazendo um while pegando o número de linhas do seu select. Isto sempre será verdadeiro e ficará num loop eterno.
Fiz alguns ajustes para o seu script ficar mais rápido. Você não precisa daquele if, basta formatar o valor que você encontrou. Se for 0 (zero) também será impresso no formato certim e no padrão brasileiro.
Outra coisa importante, nos seus select´s, cuidado ao colocar AND e OR aninhados pode comprometer a sua lógica. Veja que fiz uma alteração no seu select colocando um parenteses. Veja se é isto mesmo, pois antes mesmo que o CliEmail fosse diferente de $contausu['email'], mas o StatusTransacao fosse igual a Completo ele consideraria.
Dúvidas é só postar!
Nossa, ficou perfeito, fiz algumas pequenas alterações e rodou perfeitamente.
Obrigado!
unindo tudo
$contador = 0;
$sqlusu = mysql_query('SELECT cont(*) as qtde FROM usuarios u INNER JOIN PagSeguroTransacoes ps on u.email = ps.CliEmail and (ps.StatusTransacao="Aprovado" OR ps.StatusTransacao="Completo") WHERE u.afilid="'.$id.'"');
$conta=mysql_fetch_array($sqlusu);
$contador=$conta['qtde'];
$valor = ($contador*6.45);
echo 'R$ '.number_format($valor,2,',','.');Sem dúvida que com JOIN é melhor, mas como ele não havia utilizado fiquei na dúvida se colocava ou não o JOIN.
Com JOIN é mais rápido e economiza um acesso ao banco. Valew!!!