Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Exibindo somatória de ítens


Carlos Rocha

Pergunta

Ola pessoal.

To precisando de uma grannnnnnnnnnnnnnnnde força de voces.

Tenho o resultado de uma consulta sql normal retornando os seguintes dados:

id, idProduto, idFornecedor, precoproduto
Trata-se de um formulario de cadastro onde o fornecedor entra, escolhe o produto em uma select e entra com o seu preço em cada produto. Então. Eu preciso exibir estes dados de forma tal que o codigo some o valor de cada produto do mesmo fornecedor e iprime os valor total. No caso, só haverá um item de cada produto. Seria mais ou menos impresso assim:
produto 1     
produto 2           123,30          Fornecedor1   (EMBORA O RESULTADO DA QUERY RETORNA 3 VEZES O NOME DO FORNECEDOR, AQUI ELE SÓ APARECERÁ 1VEZ)  
produto 3     


produto 1     
produto 2           132,80          Fornecedor2   (EMBORA O RESULTADO DA QUERY RETORNA 3 VEZES O NOME DO FORNECEDOR, AQUI ELE SÓ APARECERÁ 1VEZ)  
     
produto 3     


produto 1     
produto 2           153,20          Fornecedor3   (EMBORA O RESULTADO DA QUERY RETORNA 3 VEZES O NOME DO FORNECEDOR, AQUI ELE SÓ APARECERÁ 1VEZ)  
     
produto 3
Como fazer isso? ah. A consulta que usei foi essa:
Select 
                      pp.id, pp.idProduto, pp.idFornecedor, p.nome, f.nome, pp.preço
                    from 
                      produtopreco pp
                      inner join produtos p on pp.idProduto=p.id
                      inner join fornecedores f on pp.idFornecedor=f.id
                    where
                      $produtoid
                    order by f.nome, p.nome, pp.preço

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

O que você vai ter que fazer é ir somando o valor em uma variável qualquer e controlar o nome do fornecedor em outra variável, se o nome mudar você imprime as duas colunas da direita (preço e fornecedor) com esses dados, zera o valor da variável que controla o valor total e atualiza o valor da variável que controla o nome do fornecedor.

Link para o comentário
Compartilhar em outros sites

  • 0

Serra , não estou conseguindo.

veja o que eu consegui. (Mas não é isso. Não saiu do jeito da figura)

Onde posso mudar o que?

<?
 $produtos=mysql_query("
                    SELECT
                      id,
                      nome  
                    FROM 
                      produtos
                      ");
 if (mysql_num_rows($produtos)==0){print "Num deu!";}
 else {
?>
<form name="verpreco" method="post" action="?acao=verpreco">
<table width="500" border="1" align="center">
  <tr>
    <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td>
  </tr>
  <tr><td colspan="10">Produto:</td></tr>
    <?
    $i=1;
    while (list($id, $nome) = mysql_fetch_row($produtos))
    {
            echo '<td><input type="checkbox" name="produtoid[]" value="'.$id.'" />'.$nome.'</td>';
            if( $i%10==0 ) {echo '</tr><tr>';}
    
            $i++;
    }

    ?>    
    
  <tr>
    <td colspan="10" align="center" valign="middle"><input type="submit" value="Pesquizar" /></td>
  </tr>
</table>
</form>
<?     }    ?>

-------------------------------------------------
<?
if($acao=="verpreco") {
    if     ($idproduto)
    {
        $produtoid=urldecode($idproduto);
        
    }
    else
    {
        foreach($_POST['produtoid'] AS $key => $value)
        { 
          $var[]="p.id=".$value." or";
        }
        $produtoid=implode(' ',$var); 
        $produtoid= substr($produtoid,0, -3);
    }
    
    

        
$sql = mysql_query("
                    Select 
                      pp.id, pp.idProduto, pp.idFornecedor, p.nome, f.nome, pp.preço
                    from 
                      produtopreco pp
                      inner join produtos p on pp.idProduto=p.id
                      inner join fornecedores f on pp.idFornecedor=f.id
                    where
                      $produtoid
                    order by f.nome, p.nome, pp.preço 
                   ");
                   
$total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela
$lpp = 10; // Especifique quantos resultados você quer por página
$paginas = ceil($total / $lpp); // Retorna o total de páginas
if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada
$inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL
$sql = mysql_query("
                    Select 
                      pp.id, pp.idProduto, pp.idFornecedor, p.nome, f.nome, pp.preço
                    from 
                      produtopreco pp
                      inner join produtos p on pp.idProduto=p.id
                      inner join fornecedores f on pp.idFornecedor=f.id
                    where
                      $produtoid
                    order by f.nome, p.nome, pp.preço 
                    LIMIT $inicio, $lpp
                  ");
print "<table align='center' width=400 bgcolor='#0080C0'>";    

    if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php }
    else {
print "<tr                  ><td align=center colspan=3>Preços dos fornecedores para o produto $produtoenviado</td></tr>";
print "<tr BGCOLOR='#CCCCCC'>
           <td align=center>Produto</td>        ";    
print "    <td align=center>Preço Total</td>          ";    
print "    <td align=center>Fornecedor</td>
      </tr>";               
while(list($id, $idProduto, $idFornecedor, $nomeproduto, $nomefornecedor, $preço)=mysql_fetch_row($sql)){
  print "<tr BGCOLOR='#FFFFFF'>
             <td align=center>$nomeproduto - $preço</td>        ";    
  print "    <td align=center>$precototal          </td>        ";    
  print "    <td align=center>$nomefornecedor      </td>
         </tr>";               
                                                                                                    }    
       }   
if($pagina > 0) {
   $menos = $pagina - 1;
   $url = "$PHP_SELF?acao=verpreco&pagina=$menos&idproduto=".urlencode($produtoid);
   echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior
}
for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas
   $url = "$PHP_SELF?acao=verpreco&pagina=$i&idproduto=".urlencode($produtoid);
   echo " | <a href=".$url.">$i</a>";
}
if($pagina < ($paginas - 1)) {
   $mais = $pagina + 1;
   $url = "$PHP_SELF?acao=verpreco&pagina=$mais&idproduto=".urlencode($produtoid);
   echo " | <a href=".$url.">Próxima</a>";
}                                                                                                        
print "</table>";                                                                                   
}
?>

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

E onde exatamente você tentou implementar o que eu falei? Pois nesse script ai é que não foi, tente fazer o que eu disse, se não conseguir, ai mostre o que você fez baseado no que eu disse e ai a gente tenta ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0

ok

consegui mudando a sql e não no php

mas agora surgiu uma outra incógnita.

Na sql abaixo, ele me retorno 1 nome de fornecedor para todos os produtos e a soma dos valores dos produtos

e no caso de eu precisar mostra tambem os nomes dos produtos?

O que adaptar?

$sql = mysql_query("
                    select 
                       distinct(pp.idFornecedor), 
                       f.nome,
                       sum(pp.preço) 
                    from produtopreco pp
                      inner join fornecedores f on f.id=pp.idFornecedor
                    where 
                      $produtoid
                    group by 
                       pp.idFornecedor
                    LIMIT $inicio, $lpp
                  ");

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui!

Ficou assim: (caso alguém tenha uma ideia para enxugar o código, por favor, eu aceito e agradeço)

Por enquanto meu muito obrigado a quem ajudou.

só uma coisa ainda não consegui fazer

A ideia seria a exibiçao saisse como na figura abaixo

aa.jpg

A coluna que mostra os nomes dos produtos ao lado do preço final não consegui como na figura

Só consegui ecxbir o preço final e o nome do fornecedor.

Caso alguém possa me ajudar nessa eu agradeço.

<?
 $produtos=mysql_query("
                    SELECT
                      id,
                      nome  
                    FROM 
                      produtos
                      ");
 if (mysql_num_rows($produtos)==0){print "Num deu!";}
 else {
?>
<form name="verpreco" method="post" action="?acao=verpreco">
<table width="500" border="1" align="center">
  <tr>
    <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td>
  </tr>
  <tr><td colspan="10">Produto:</td></tr>
    <?
    $i=1;
    while (list($id, $nome) = mysql_fetch_row($produtos))
    {
            echo '<td><input type="checkbox" name="produtoid[]" value="'.$id.'" />'.$nome.'</td>';
            if( $i%10==0 ) {echo '</tr><tr>';}
    
            $i++;
    }

    ?>    
    
  <tr>
    <td colspan="10" align="center" valign="middle"><input type="submit" value="Pesquizar" /></td>
  </tr>
</table>
</form>
<?     }    ?>

-------------------------------------------------
<?
if($acao=="verpreco") {
    //aqui, verifico de já foi clikado na paginaçao e se a variavel iproduto(do link da paginação) veio. Se sim, decodifica, se não, prossegue o código.
    if     ($idproduto)
    {
        $produtoid=urldecode($idproduto);
        
    }
    else
    {
        foreach($_POST['produtoid'] AS $key => $value)
        { 
          $var[]="pp.idProduto=".$value." or";
        }
        $produtoid=implode(' ',$var); 
        $produtoid= substr($produtoid,0, -3);
    }
    //aqui,faço uma pesquisa pelos nomes dos produitos para exibir no cabeçalho da tabela
    $pesquisaprodutos=mysql_query("
                                   select 
                                     distinct(nome )
                                   from 
                                     produtos p 
                                   inner join 
                                      produtopreco pp on pp.idProduto=p.id
                                   where 
                                     $produtoid
                               ");
    while(list($nomesdeprodutos) = mysql_fetch_row($pesquisaprodutos))
    {
              $varnome[]=$nomesdeprodutos." e ";
    }
    $nomes=implode(' ',$varnome); 
    $produtonome= substr($nomes,0, -2);
    
    //aqui, começo a tabela
print "<table align='center' width=400 bgcolor='#0080C0'>";    
print "<tr                  ><td align=center colspan=3>Preços dos fornecedores para os produtos $produtonome</td></tr>";
//aqui começo a paginação.
$sql = mysql_query("
                    select 
                       distinct(pp.idFornecedor), 
                       f.nome,
                       sum(pp.preço) 
                    from produtopreco pp
                      inner join fornecedores f on f.id=pp.idFornecedor
                    where 
                      $produtoid
                    group by 
                       pp.idFornecedor
                    order by 
                       sum(pp.preço) 
                  ");
                   
$total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela
$lpp = 10; // Especifique quantos resultados você quer por página
$paginas = ceil($total / $lpp); // Retorna o total de páginas
if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada
$inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL
$sql = mysql_query("
                    select 
                       distinct(pp.idFornecedor), 
                       f.nome,
                       sum(pp.preço) 
                    from produtopreco pp
                      inner join fornecedores f on f.id=pp.idFornecedor
                    where 
                      $produtoid
                    group by 
                       pp.idFornecedor
                    order by 
                       sum(pp.preço) 
                    LIMIT $inicio, $lpp
                  ");

    if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php }
    else {
print "<tr BGCOLOR='#CCCCCC'>";    
print "    <td align=center>Preço Total</td>          ";    
print "    <td align=center>Fornecedor</td>           ";
print "</tr>";               
while(list($idFornecedor, $nomefornecedor, $precototal)=mysql_fetch_row($sql)){
  print "<tr BGCOLOR='#FFFFFF'>";    
  print "    <td align=center>$precototal          </td>        ";    
  print "    <td align=center>$nomefornecedor      </td>        ";
print "</tr>";               
                                                                                }    
       }   
if($pagina > 0) {
   $menos = $pagina - 1;
   $url = "$PHP_SELF?acao=verpreco&pagina=$menos&idproduto=".urlencode($produtoid);
   echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior
}
for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas
   $url = "$PHP_SELF?acao=verpreco&pagina=$i&idproduto=".urlencode($produtoid);
   echo " | <a href=".$url.">$i</a>";
}
if($pagina < ($paginas - 1)) {
   $mais = $pagina + 1;
   $url = "$PHP_SELF?acao=verpreco&pagina=$mais&idproduto=".urlencode($produtoid);
   echo " | <a href=".$url.">Próxima</a>";
}                                                                                                        
print "</table>";                                                                                   
}
?>

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...