Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Diniz

montar um relatório

Recommended Posts

Pessoal, estou tendo dificuldades para montar um relatório e gostaria de saber se podem me dar uma força.

 

É assim, tenho uma query que faz uma consulta no Banco de Dados que ira me trazer algumas coisas, como Cliente, Mandatario, Operador e Produtos.

 

traz mais ou menos assim:

Cliente | Mandatario | Operador | Produto
-----------------------------------------
Itau      Joao         Alberto    DI
Itau      Joao         Alberto    DOL
Itau      Joao         Alberto    FRC
Itau      Joao         Alberto    PAP
Bradesco  Maria        Cris       DI
Bradesco  Maria        Cris       DOL
Bradesco  Maria        Cris       PAP
Bradesco  Bruno        Anderson   DOL
Bradesco  Bruno        Anderson   FRC
Bradesco  Bruno        Anderson   PAP

dai eu começo a listar e vejo qual é o produto e faço uma outra busca para ver qual o valor para esse produto e mostro o valor.

 

A estrutura do meu ralatório que estou fazendo é mais ou menos assim:

 

Cliente | Mandatario | Operador | DI | DOL | FRC | PAP | Total
--------------------------------------------------------------
Itau      Joao         Alberto    5    0     0     0    5
Itau      Joao         Alberto    0    10    0     0    10
Itau      Joao         Alberto    0    0     8     0    8
Itau      Joao         Alberto    0    0     0     4    4
Bradesco  Maria        Cris       3    0     0     0    3
Bradesco  Maria        Cris       0    12    0     0    12
Bradesco  Maria        Cris       0    0     0     9    9
Bradesco  Bruno        Anderson   0    6     0     0    6
Bradesco  Bruno        Anderson   0    0     5     0    5
Bradesco  Bruno        Anderson   0    0     0     13   13

enquanto o certo seria

 

Cliente | Mandatario | Operador | DI | DOL | FRC | PAP | Total
--------------------------------------------------------------
Itau      Joao         Alberto    5    10    8     4    27
Bradesco  Maria        Cris       3    12    0     9    24
Bradesco  Bruno        Anderson   0    6     5     13   24

espero ter exposto minha duvida e que possam me ajudar.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT 
  CLIENTE, 
  MANDATARIO, 
  OPERADOR, 
  COUNT(DI) AS DI, 
  COUNT(DOL) AS DOL, 
  COUNT(FRC) AS FRC, 
  COUNT(PAP) AS PAP
FROM 
  TABELA 
GROUP BY
  CLIENTE, 
  MANDATARIO, 
  OPERADOR 

 

É mais ou menos assim, você agrupa e soma as colunas que você precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dee, valew, mas uma query assim eu entendo.

 

Fiz a seguinte query

	$sql = "SELECT DISTINCT cli.CodAttivo, 
				cli.NMCliente, 
				man.Cod_Mandatario, 
				man.Nome_Mandatario,
				fun.Cod_Colaborador, 
				col.NMLogin,
				col.NMUsuario,
				fun.Cod_Produto
		FROM 	funcoes fun, 
			tmpclientes cli, 
			tmpmandatarios man, 
			tmpcolaboradores col";
	$where = " WHERE fun.Cod_Cliente = cli.CodAttivo AND
			fun.Cod_Mandatario = man.Cod_Mandatario AND
			fun.Cod_Cliente = man.Cod_Cliente AND		
			fun.Cod_Colaborador = col.CodColaborador AND
			
			col.NMLogin in(
				SELECT id_operador FROM tb_diario WHERE dt_data >= '$dt_inicio' AND dt_data <= '$dt_fim'			
			)";
															
	$order = " ORDER BY cli.NMCliente, man.Nome_Mandatario, col.NMUsuario";

e isso me traz

 

Cliente | Mandatario | Operador | Produto
-----------------------------------------
Itau      Joao         Alberto    DI
Itau      Joao         Alberto    DOL
Itau      Joao         Alberto    FRC
Itau      Joao         Alberto    PAP
Bradesco  Maria        Cris       DI
Bradesco  Maria        Cris       DOL
Bradesco  Maria        Cris       PAP
Bradesco  Bruno        Anderson   DOL
Bradesco  Bruno        Anderson   FRC
Bradesco  Bruno        Anderson   PAP

dai começo um laço while e dentro do laço começo a imprimir o valor de cliente, mandatario, operador, e quando chega no primeiro produto do relatório faço uma outra busca para ver qual o valor para esse produto e mostro o valor.

 

Esta funcionando, o problema que fica com redundancia de dados.

 

Gostaria de saber se tem como trazer o produto (di, dol, frc, pap) como coluna e não por linha.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

MYSQL

 

Não sei se tem alguma função, pode ser do Banco, que me traga os produtos agrupados em uma única linha, ou algo assim, pois eu poderia tentar trabalhar com os dados a partir dai, não sei, foi uma ideia que me surgiu agora de manha, mas posso estar errado.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a dúvida é na geração da query, vou mover para o fórum de MySQL.

 

Tópico Movido

PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, valew.

 

E não sei se pode ajudar, mas quando eu restringi na query para vir apenas um produto OK, não da redundancia de dados, mas é algo obvio vão me falar, dai me traz algo assim:

 

Cliente | Mandatario | Operador | DI | DOL | FRC | PAP | Total
--------------------------------------------------------------
Itau      Joao         Alberto    5    0    0     0     5
Bradesco  Maria        Cris       3    0    0     0     3
Bradesco  Bruno        Anderson   0    0    0     0     0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, como sei q aqui vcs devem conhecer BEM melhor do que eu as funções internas do mysql, pois estou desde ontem tentando correr atras de uma função que eu vi a pouquissimo tempo atras só que não me lembro o nome desta função, então resolvi recorrer aqui ao forum.

 

Vamo la.

 

Tenho uma query que me traz os dados +ou- assim

 

Cliente | Mandatario | Operador | Produto
-----------------------------------------
Itau      Joao         Alberto    DI
Itau      Joao         Alberto    DOL
Itau      Joao         Alberto    FRC
Itau      Joao         Alberto    PAP
Bradesco  Maria        Cris       DI
Bradesco  Maria        Cris       DOL
Bradesco  Maria        Cris       PAP
Bradesco  Bruno        Anderson   DOL
Bradesco  Bruno        Anderson   FRC
Bradesco  Bruno        Anderson   PAP

só que com a função que eu tenho certeza de ter visto ele me traria os dados assim

Cliente | Mandatario | Operador | Produto
-----------------------------------------
Itau      Joao         Alberto    DI, DOL, FRC, PAP
Bradesco  Maria        Cris       DI, DOL, PAP
Bradesco  Bruno        Anderson   DOL, FRC, PAP

Sei que é uma função que coloco no select quando chamo o campo Produto.

 

Se alguem souber qual função é essa iria me ajudar muito mesmo.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utiliza DISTINCT e agrupa por cliente, exemplo:

 

SELECT DISTINCT * FROM tabela 
GROUP BY cliente;

Compartilhar este post


Link para o post
Compartilhar em outros sites

o mysql vai sempre retornar linha, o que voce precisa e fazer o tratamento no php para sair do jeito que voce quer

 

nome do item quantidade

 

A 10

B 20

D 8

Compartilhar este post


Link para o post
Compartilhar em outros sites

h4v3st - já estou utilizando distinct e quando coloquei o group by não adiantou não.

 

Matias Rezende - valew e foi mal, pode deixar que tomarei mais cuidado na proxima vez.

 

koga021 - eu estou tendo que fazer todo o tratamento no php mesmo, e esta tando uma trabalheira danada, mas estou conseguindo. O que eu queria seria muito bom, pois iria melhorar a performance (e consideravelmente) do relatório e tbm ficaria muito mais limpo o código e de facil manutenção.

 

Obrigado, e se souberem de alguma solução para o meu problema será muito bem vindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, Valew pela ajuda, mas quanto a isso até postaria, mas peguei esse projeto no meio, esta a maior bagunça que eu já vi, literalmente, e não querem que mude. Não sou magico e estou me virando da maneira que da, imagino que entenda o que estou dizendo.

 

E giesta, era exatamente issoqeu eu procurava, o GROUP_CONCAT , parece lógico o nome, mas não lembrava mesmo.

 

Digamos que eu fiz na mão as coisas enquanto isso salvaria meu dia de ontem e minha manha de hoje, mas vou fazer os teste aqui para ver qual das opções eu tenho melhor performance, imagino que com isso, mas não sei ainda.

 

Obrigado mesmo pela ajuda de todos.

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.