Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 13:56

Olá ! Estou estreando aqui no fórum e primeiro gostaria de agradecer e parabenizá-los por esse espaço.

Bem, eu estou utilizando um loop para mostrar os produtos de um pedido, mas quando os produtos forem repetidos preciso inserir um sub-total abaixo deles.

O meu código está com erro porque não estou conseguindo fazer um loop interno quando os produtos são iguais.
Ele considera 2 e mostra o sub-total, aí no terceiro ele mostra o sub-total de novo. Além disso, não está fazendo a soma. :huu:

Desculpe por um tópico tão grande, mas acho que é melhor maneira de explicar o problema e acho que pra vocês é coisa simples..

<?php  $query5 = "SELECT pr.Pro_Descricao, it.Ite_Sequencia, it.Ite_Qtde, it.Ite_QtdeEnviada FROM DN_Pedidos pe, DN_ItensPedido it, DN_Produtos pr  WHERE                  pe.Ped_Cliente = '$clicd'         AND it.Ite_Codigo = pe.Ped_Codigo        AND it.Ite_Sequencia = pr.Pro_Codigo     ORDER BY pr.Pro_Descricao asc, pe.Ped_Codigo asc";  $res5 = mysql_query($query5); while($ret5 = mysql_fetch_array($res5)){ $somaqt =0; $somaqte =0; $somaqtf =0; if ($cdpr != $ret5['Ite_Sequencia']){ $cdpr = $ret5['Ite_Sequencia'];    // esse é o código do produto $prd = $ret5['Pro_Descricao']; nome do produto $qt = (int)$ret5['Ite_Qtde']; //qtde pedida $qte = (int)$ret5['Ite_QtdeEnviada']; //qtde enviada $qtf = (int)($qt - $qte); //o que falta enviar ?>     <tr>   <td><?php echo $prd.'-'.$cdpr;?></td> <td><?php echo $qt;?></td>     <td><?php echo $qte;?></td>      <td><?php echo $qtf;?></td>   </tr> <? } else { $somaqt = $somaqt + $ret5['Ite_Qtde']; $somaqte = $somaqte + $ret5['Ite_QtdeEnviada'];     $somaqtf = $somaqtf + $qtf; $cdpr = $ret5['Ite_Sequencia'];     $prd = $ret5['Pro_Descricao']; $qt = (int)$ret5['Ite_Qtde']; $qte = (int)$ret5['Ite_QtdeEnviada']; $qtf = (int)($qt - $qte); if ($cdpr == $ret5['Ite_Sequencia']){ ?>       <tr>   <td><?php echo $prd.'-'.$cdpr;?></td> <td><?php echo $qt;?></td>     <td><?php echo $qte;?></td>      <td><?php echo $qtf;?></td>   </tr> <? } ?>     <tr><td></td><td></td>     <td>Sub-total:</td>  <td><?php echo $somaqt;?></td>     <td><?php echo $somaqte;?></td>      <td><?php echo $somaqtf;?></td>   </tr> <? } } /* fecha o segundo while*/ ?>

O resultado está assim:

VOIL-460 | 100 | 0 | 100
CETIM-459 | 160 | 130 | 30
CETIM-459 | 100 | 20 | 80
Sub-total do Produto: 100 | 20 | 30 // valores errados!
CETIM-459 |100 | 98 | 2
Sub-total do Produto: 100 | 98 | 80 //valores errados!
SEDA-574 | 100 | 50 | 50

Agradeço muito se puderem me ajudar.

Abraços,

Dammy=
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 14:02

Bem vinda ao fórum.

Esse subtotal, seria a soma das linhas repetidas somente?

Quando não fosse repetido não teria o subtotal?
0
A melhor hospedagem para o seu site HostGator!
 

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 14:05

Olá.

Obrigada !!!

É isso mesmo, tenho que listar todos os produtos do pedido e mostrar um sub-total somente dos produtos que são repetidos dentro do pedido.

Abraço,
Dammy
0
 

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 15:31

Alguém, sabe como posso resolver?

Já fiz outras tentativas aqui, mas não deu certo ainda.

obrigada !
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 15:55

Já tentou o seguinte, especificar no select o id do produto, assim, a consulta irá retornar somente as linhas do produto.

Sendo assim, você pode colocar fora do while

$valor = 0; 

Já dentro do while teria o seguinte:

$valor+= "$campodatabela"; 

Ai, fora do while (abaixo) o seguinte:

echo "total de $valor"; 

0
A melhor hospedagem para o seu site HostGator!
 

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 16:01

Acho que entendí...

mas eu tenho que listar "todos" os produtos do pedido.
Tentei colocar mais um SELECT para listar só os produtos repetidos (como vc disse), mas não conseguí acertar isso.

Ou não mostra nada ou mostra o subtotal em tudo...
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 16:07

Vou ver se há uma possibilidade aqui com vários produtos, mas, acho que o mais possível é com um mesmo.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 16:38

Montei um exemplo aqui e acho que consegui, usei a seguinte lógica:
fazer um select distinct exibindo os dados únicos, depois, um outro select com sum, somando os campos desejado.
No teste que fiz usei essa estrutura:

CREATE TABLE dados (   id VARCHAR(20) NOT NULL DEFAULT '',   quantidade VARCHAR(10) NOT NULL DEFAULT '' ) TYPE=MyISAM; INSERT INTO dados (id, quantidade) VALUES ('1', '2'), ('3', '4'), ('1', '3');

Agora segue o script que usei:

<?php $conexao = mysql_connect("localhost", "login", "senha") or die(mysql_error()); $db = mysql_select_db("bancodedados"); ?> <?php $selec = "SELECT DISTINCT id FROM dados"; $exec = mysql_query($selec, $conexao) or die(mysql_error()); ?> <?php while($dados=mysql_fetch_array($exec)) { $lista = $dados['id']; echo "$lista<br>"; echo "subtotal de..."; $selec_2 = "SELECT SUM(quantidade) AS soma FROM dados WHERE id='$lista'"; $exec_2 = mysql_query($selec_2, $conexao) or die(mysql_error()); while($dados_2=mysql_fetch_array($exec_2)) { echo $dados_2['soma']."<br>"; } } ?> <?php mysql_close($conexao); ?>

0
A melhor hospedagem para o seu site HostGator!
 
 

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 17:16

Não deu certo !

Deu erro no distinct, não entendi bem porquê...

Fiz várias tentativas... ele mostra erro no mysql_fetch_array, talvez por causa da complexidade da consulta.
No teste que vc fez a consulta era simples...

não sei... na verdade não entendí mesmo...
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

11-08-2007 17:26

Como teu script é personalizado, me contacta pelo msn
0
A melhor hospedagem para o seu site HostGator!
 

preciso mostrar a soma abaixo dos campos que forem repetidos

12-08-2007 17:10

Talvez possa ajudar alguém...
Quando estiver com um pouquinho mais de tempo, vou aprimorar o código, mas por agora, resolveu o problema...
Simplifiquei um pouco o código abaixo, mas dá pra entender a lógica (que era minha dificuldade).
Abração pra vocês !!
Dammy

<?php  //aqui vem o SELECT da tabela  while($ret5 = mysql_fetch_array($res5)){  if ($cdpr != $ret5['Ite_Sequencia']){  $cdpr = $ret5['Ite_Sequencia'];   // esse é o código do produto  $prd = $ret5['Pro_Descricao']; nome do produto  $qt = (int)$ret5['Ite_Qtde']; //qtde pedida  $qte = (int)$ret5['Ite_QtdeEnviada']; //qtde enviada  $qtf = (int)($qt - $qte); //o que falta enviar  ?>     <tr>   <td><?php echo $prd.'-'.$cdpr;?></td>  <td><?php echo $qt;?></td>     <td><?php echo $qte;?></td>       <td><?php echo $qtf;?></td>   </tr>  <?  } else {  //aqui criei outro SELECT simples só pra pegar o total de linhas repetidas  //e coloquei um contador  $somaqt = $qt + $qt1;  $somaqte = $qte + $qte1;  $cdpr = $ret5['Ite_Sequencia'];     $prd = $ret5['Pro_Descricao'];  $qt = (int)$ret5['Ite_Qtde'];  $qte = (int)$ret5['Ite_QtdeEnviada'];  $qtf = (int)($qt - $qte);  ?>       <tr>   <td><?php echo $prd.'-'.$cdpr;?></td>  <td><?php echo $qt;?></td>     <td><?php echo $qte;?></td>       <td><?php echo $qtf;?></td>   </tr>  //aqui coloquei um IF: quando o contador for igual ao total de linhas, exibe o subtotal do produto  <tr><td></td><td></td>     <td>Sub-total:</td>  <td><?php echo $somaqt;?></td>     <td><?php echo $somaqte;?></td>       <td><?php echo $somaqtf;?></td>   </tr>  <? }  } /* fecha o segundo while*/  ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17738
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

preciso mostrar a soma abaixo dos campos que forem repetidos

12-08-2007 17:13

:)
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado