Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cabuloz0

[Resolvido] Agrupar resultados busca mysql

Recommended Posts

Galera, desculpem se já existe algum tópico falando sobre isso, o problema é que eu não sei nem pesquisar sobre esse problema! Vou tentar explicar!

 

Estou fazendo um mini sistema de controle de vendas e estou precisando colocar o relatório do mês inteiro e quanto cada funcionário vendeu por dia, labutei essa manhã inteira mas ainda não cheguei na onde queria

fiz assim

 

$sql = "SELECT * FROM caixa WHERE MONTH(data)='$mes' AND operacao='Venda' ORDER BY funcionario;";
$qry = mysql_query($sql);
while($ft = mysql_fetch_array($qry)){
  $cont++;
  if(($cont%2) == 0){ $cor = "#CCC"; }  else { $cor = "#EEE"; }
 echo'
<tr>
  <td class="bordaEsq" style="background:'.$cor.';">'.limitar(selectFuncionario($ft['funcionario']),40).'</td>
     <td class="bordaEsq" style="background:'.$cor.';">'.$ft['operacao'].'</td>
     <td class="bordaEsq" style="background:'.$cor.';">'.$ft['total'].'</td>
     <td class="bordaEsq" style="border-right:1px solid #999; background:'.$cor.';">'.$ft['data'].'</td>
  </tr>';
  $func[$ft['funcionario']] = $func[$ft['funcionario']] + (float)$ft['total'];
}

 

mas ficou repetindo os dias, então tentei algo assim

while($ft = mysql_fetch_array($qry)){
  $cont++;
  $total[$ft['data']] = $total[$ft['data']] + (float)$ft['total'];
  if(($cont%2) == 0){ $cor = "#CCC"; }  else { $cor = "#EEE"; }
 $tr1[] = '
<tr>
  <td class="bordaEsq" style="background:'.$cor.';">'.limitar(selectFuncionario($ft['funcionario']),40).'</td>
     <td class="bordaEsq" style="background:'.$cor.';">'.$ft['operacao'].'</td>
     <td class="bordaEsq" style="background:'.$cor.';">';

     $d[] = $ft['data'];

  $tr2[] = '</td>
     <td class="bordaEsq" style="border-right:1px solid #999; background:'.$cor.';">'.$ft['data'].'</td>
  </tr>';
  $func[$ft['funcionario']] = $func[$ft['funcionario']] + (float)$ft['total'];
}
for($i=0;$i<count($tr1);$i++){
     echo $tr1[$i].$total[$d[$i]].$tr2[$i];
}
?>

Mesmo assim não deu certo!

 

DESCULPE AINDA SOU LEIGO EM PHP! Se puderem me ajudar a corrigir meu código e fazer ele funcionar! Se alguém não tiver entendido fala que eu tento explicar de novo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sua dúvida não é php e sim sintaxe SQL no banco mysql

SELECT 
  `funcionario`, --seleciona o campo
  date_format(`DATA`, '%d/%m/%Y') as data_formatada, --seleciona data formatada
  sum( `valor` ) --soma o valor
FROM 
  `caixa` 
WHERE 
  MONTH(`DATA`)='{$mes}' --pega somente um mês
AND 
  `operacao` = 'Venda' --pega somente Venda
GROUP BY 
  `funcionario`,--agrupa por funcionários
  `data_formatada` --agrupa por data
ORDER BY 
  `funcionario` --ordena por funcionário

veja no manual mysql

DATE_FORMAT

SUM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara olhei o seu código e concordei com você porem não consegui fazer funcionar

vou te dar os detalhes da minha aplicação

 

Tabela:

http://img193.imageshack.us/img193/1111/tabelasv.jpg

 

fiz um arquivo de teste, vamos basear nele que por ele consigo arrumar lá!

 

<?php
$mes = date('m');
$data = date("Y-m-d");
$sql = "SELECT `funcionario`, 
	DATE_FORMAT(`DATA`, '%Y-%m-%d') AS 'data', 
	sum( `valor` ) FROM `caixa` WHERE MONTH(`DATA`)='{$mes} 
	AND `operacao` = 'Venda' GROUP BY `funcionario`, `data` ORDER BY `funcionario`;";

$qry = mysql_query($sql);
while($ft = mysql_fetch_array($qry)){
echo $ft['funcionario'].' - '.$ft['valor'].' - '.$ft['data'].'<br />';
}
?>

eu tentei dessa forma, mas deu erro de parametro

- Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Caixa\module\teste.php on line 10

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem problema de aspas nessa sua SQL. Tente assim:

$sql = "SELECT `funcionario`, 
               DATE_FORMAT(`DATA`, '%Y-%m-%d') AS 'data', 
               sum( `valor` ) FROM `caixa` WHERE MONTH(`DATA`)='{$mes}' 
               AND `operacao` = 'Venda' GROUP BY `funcionario`, `data` ORDER BY `funcionario`;";

 

Sempre que tiver problemas com fetches, ou query não sendo executada, faça um debug no código, use um:

or die ( mysql_error( ) );

 

Para ter informações mais específicas sobre o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$mes = date('m');
$data = date("Y-m-d");
$sql = "SELECT `funcionario`, 
               DATE_FORMAT(`DATA`, '%Y-%m-%d') AS 'data', 
               sum( `total` ) FROM `caixa` WHERE MONTH(`DATA`)='{$mes}' 
               AND `operacao` = 'Venda' GROUP BY `funcionario`, `data` ORDER BY `funcionario`;";

$qry = mysql_query($sql) or die( mysql_error( ) );
while($ft = mysql_fetch_array($qry)){
echo $ft['funcionario'].' - '.$ft['total'].' - '.$ft['data'].'<br />';
}
?>

 

Resultado

3 - - 2011-08-22

4 - - 2011-08-19

4 - - 2011-08-20

5 - - 2011-08-19

 

Como pego a soma ??

totalDaSoma??

4 - totalDaSoma - 2011-08-19

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim no SQL.

$sql = "SELECT `funcionario`, 
               DATE_FORMAT(`DATA`, '%Y-%m-%d') AS 'data', 
               sum( `total` ) as `soma` FROM `caixa` WHERE MONTH(`DATA`)='{$mes}' 
               AND `operacao` = 'Venda' GROUP BY `funcionario`, `data` ORDER BY `funcionario`;";

 

E pega como índice 'soma',

printf( 'Funcionário: %s - Total: %d - Data: %s - Soma: %s' , 
$ft[ 'funcionario' ] , $ft[ 'total' ] , $ft[ 'data' ] , $ft[ 'soma' ] );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, agora deu certo!

Código

<?php
$mes = date('m');
$data = date("Y-m-d");
$sql = "SELECT `funcionario`, 
               DATE_FORMAT(`DATA`, '%Y-%m-%d') AS 'data', 
               sum( `total` ) as `soma` FROM `caixa` WHERE MONTH(`DATA`)='{$mes}' 
               AND `operacao` = 'Venda' GROUP BY `funcionario`, `data` ORDER BY `funcionario`;";

$qry = mysql_query($sql) or die( mysql_error( ) );
while($ft = mysql_fetch_array($qry)){
//echo $ft['funcionario'].' - '.$ft['total'].' - '.$ft['data'].'<br />';
printf( 'Funcionário: %s - Data: %s - Soma: %s <br />' , $ft[ 'funcionario' ] , $ft[ 'data' ] , $ft[ 'soma' ] );
//echo 'Funcionario ' . $ft[ 'funcionario' ] . ' total ' . $ft[ 'total' ] . ' data ' . $ft[ 'data' ] . ' soma ' . $ft[ 'soma' ] . '<br />';
}
?>

Resultado

Funcionário: 3 - Data: 2011-08-22 - Soma: 100.00

Funcionário: 4 - Data: 2011-08-19 - Soma: 57.00

Funcionário: 4 - Data: 2011-08-20 - Soma: 245.00

Funcionário: 5 - Data: 2011-08-19 - Soma: 22.50

Agora vou implementa-lo no meio do código, mas agora acredito que está tudo Ok!

Victor e Andrey, muito obrigado pela ajuda! ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.