Ir para conteúdo

POWERED BY:

Arquivado

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

lilithdani

[Resolvido] Tabela bidimensional de log de vendas (MySQL)

Recommended Posts

Oi pessoal,

 

Gostaria de saber como fazer para somar resultados em PHP MySQL?

 

 

 

Minha tabela no mysql:

 

data vendedor precovenda

2008-07-28 19:30:00 | 2 | 8.80

2008-07-28 19:43:32 | 2 | 8.80

2008-07-28 19:58:33 | 1 | 8.80

2008-07-29 20:00:30 | 2 | 5.00

2008-07-29 20:39:13 | 2 | 5.00

2008-07-29 20:45:08 | 1 | 9.90

2008-07-30 22:55:23 | 1 | 4.01

2008-07-30 22:57:28 | 2 | 4.02

2008-07-30 22:57:28 | 3 | 4.30

 

 

 

Na saida de dados, preciso a soma das vendas do vendedor y, no dia x

 

dia/vendedor| 1 | 2 | 3 | ...

2008-07-28 | 8.80 | 17.60 | 0.00 | ...

2008-07-29 | 9.90 | 10.00 | 0.00 | ...

2008-07-30 | 4.01 | 4.02 | 4.30 | ...

...

 

 

Alguém poderia me ajudar como eu extrair esses dados do DB, e se possível, montar essa tabela bidimensional (data.x,vendedor.y)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, você quer saber como fica a query que retorna a soma das vendas do vendedor y, no dia x ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, você quer saber como fica a query que retorna a soma das vendas do vendedor y, no dia x ?

 

Isso mesmo, Marcio...

 

1) Preciso saber a query que retorna a spma das vendas do vendedor y, no dia x

 

2) Preciso saber em PHP como indexar o resultado dessas querys num array bidimensional (dia x, vendedor y)

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_SESSION['<dia>'][".$vendedores[]."]

Assim

$_SESSION['dia'] = 03/01/2009

 

$_SESSION['03/01/2009'] = $vendedores['...x'];

 

Onde

$vendedores = array(

1 =>"Dunha",

2 =>"Mario",

3 =>"Jumeleu");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dado os valores;

 

2008-07-28 | 8.80 | 17.60 | 0.00 |

2008-07-29 | 9.90 | 10.00 | 0.00 |

2008-07-30 | 4.01 | 4.02 | 4.30 |

 

$_SESSION['dia'] = "2008-07-28";

$_SESSION['dia']['1'] = "8.80";
$_SESSION['dia']['2'] = "17.60";

$_SESSION['amanhã'] = "2008-07-29";

$_SESSION['amanhã']['1'] = "9.90";

Ou..

pode se definir uma sessão com indice igual o dia.

 

EX:

$_SESSION['2008-07-28'] = array(
1 => " 8.80",
2 => " 17.60",
3 => " 0.00");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dado os valores;

 

2008-07-28 | 8.80 | 17.60 | 0.00 |

2008-07-29 | 9.90 | 10.00 | 0.00 |

2008-07-30 | 4.01 | 4.02 | 4.30 |

 

$_SESSION['dia'] = "2008-07-28";

$_SESSION['dia']['1'] = "8.80";
$_SESSION['dia']['2'] = "17.60";

$_SESSION['amanhã'] = "2008-07-29";

$_SESSION['amanhã']['1'] = "9.90";

Ou..

pode se definir uma sessão com indice igual o dia.

 

EX:

$_SESSION['2008-07-28'] = array(
1 => " 8.80",
2 => " 17.60",
3 => " 0.00");

 

 

 

Renato, talvéz eu possa ter me expressado um pouco mal.

 

Eu estou trabalhando com dados do mysql.

 

Eu tenho um log de vendas no DB. Nessa tabela eu tenho a data e hora da venda, o vendedor e o valor do item vendido.

 

O que eu preciso fazer é somar (agrupar) os totais de vendas que cada vendedor fez no dia (o log de vendas composto pela venda item a item). Com esses dados eu preciso colocar num array em PHP, pra depois gerar uma tabela (estilo excel) com a soma do que cada vendedor vendeu no dia.

 

Eu preciso saber quanto cada vendedor vendeu e qual foi o que vendeu mais e menos em cada um dos dias pra gerar uma tabela e gráficos na tela e exportar os dados para o excel.

 

Eu não estou conseguindo:

 

1) A query do mysql para pegar a soma dos valores de cada vendedor fez em cada dia (tipo, do dia 1 ao dia 30 (campo x), qual foi a soma de vendas do dia (campo y)

 

2) Como eu dimensiono isso em array x,y (dia, vendedor) pra eu montar uma tabela ou grafico.

 

 

 

dia/ vendedor 1 / vendedor 2 / vendedor 3 / ....

1

2

3

4

5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta query eu usei para Somar valores... onde uma tabela tinha.

Valores + data + nome ... etc.

 

select SUM(valor), ANOMES_COMP from fp_acum_verbas where IDE_FUNCIONARIO='010040' GROUP by ANOMES_COMP
SQL Server.

 

 

Com MySQL é quase a mesma coisa..

faça um select no phpMyAdmin.. mais ou menos assim.

 

 

2008-07-28 19:30:00 | 2 | 8.80

2008-07-28 19:43:32 | 2 | 8.80

2008-07-28 19:58:33 | 1 | 8.80

2008-07-29 20:00:30 | 2 | 5.00

2008-07-29 20:39:13 | 2 | 5.00

2008-07-29 20:45:08 | 1 | 9.90

2008-07-30 22:55:23 | 1 | 4.01

2008-07-30 22:57:28 | 2 | 4.02

 

De acordo com os valores.. eu suponho que tenha.

 

DATA , COD_VENDEDOR, VALOR_TOTAL_DO_DIA

 

query:

 

SELECT DATA,COD_VENDEDOR,SUM(VALOR_TOTAL_DO_DIA) FROM TABELA ORDER BY 'DATA' GROUP BY 'COD_VENDEDOR', DATA

Não sou bom com MySQL.. mas creio que vá dar certo.. teste a query depois eu monto os arrays para você;

Vamos por partes para facilitar.

 

OBS: Depois é só colocar um date_format para o valor 2008-07-28 19:30:00 virar 28/07/2008

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta query eu usei para Somar valores... onde uma tabela tinha.

Valores + data + nome ... etc.

 

select SUM(valor), ANOMES_COMP from fp_acum_verbas where IDE_FUNCIONARIO='010040' GROUP by ANOMES_COMP
SQL Server.

 

 

Com MySQL é quase a mesma coisa..

faça um select no phpMyAdmin.. mais ou menos assim.

 

 

2008-07-28 19:30:00 | 2 | 8.80

2008-07-28 19:43:32 | 2 | 8.80

2008-07-28 19:58:33 | 1 | 8.80

2008-07-29 20:00:30 | 2 | 5.00

2008-07-29 20:39:13 | 2 | 5.00

2008-07-29 20:45:08 | 1 | 9.90

2008-07-30 22:55:23 | 1 | 4.01

2008-07-30 22:57:28 | 2 | 4.02

 

De acordo com os valores.. eu suponho que tenha.

 

DATA , COD_VENDEDOR, VALOR_TOTAL_DO_DIA

 

query:

 

SELECT DATA,COD_VENDEDOR,SUM(VALOR_TOTAL_DO_DIA) FROM TABELA ORDER BY 'DATA' GROUP BY 'COD_VENDEDOR', DATA

Não sou bom com MySQL.. mas creio que vá dar certo.. teste a query depois eu monto os arrays para você;

Vamos por partes para facilitar.

 

OBS: Depois é só colocar um date_format para o valor 2008-07-28 19:30:00 virar 28/07/2008

 

http://forum.imasters.com.br/public/style_emoticons/default/excl.gif

 

Eu tentei, mas retorna erro

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 215

 

Tentei colocar também "SELECT data,vendedor,SUM(precovenda) as venda_do_dia", mas o erro permanece

 

 

//$sql = "SELECT data,vendedor,SUM(precovenda) as venda_do_dia FROM log ORDER BY data GROUP BY vendedor,data";
  $sql = "SELECT data,vendedor,SUM(precovenda) FROM log ORDER BY data GROUP BY vendedor,data";
  $result = mysql_query($sql, $link);
  if ($row = mysql_fetch_array($result))
   {
	 do {
		 echo $row["data"].' - ';
		 echo 'vendedor: '.$row["vendedor"]." - ";
		 //echo 'Total venda: '.$row["venda_do_dia"]."<br>";
		 echo 'Total venda: '.$row["precovenda"]."<br>";
	 } while ($row = mysql_fetch_array($result));
	}

 

 

Minha tabela

DATA / HORA	   	vendedor 	Preço venda
2008-07-28 19:30:00 	 	2 	 	8.80
2008-07-28 19:43:32 	 	2 	 	8.80
2008-07-28 19:58:33 	 	1	   	8.80
2008-07-29 20:00:30 	 	2	   	5.00
2008-07-29 20:39:13 	 	2	   	5.00
2008-07-29 20:45:08 	 	1 	 	9.90
2008-07-30 22:55:23 	 	1 	 	4.01
2008-07-30 22:57:28 	 	2 	 	4.02
2008-07-30 22:58:00 	 	3 	 	4.30

 

 

Variaveis no DB:

 

CREATE TABLE IF NOT EXISTS `log` (
  `data` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `vendedor` int(2) default NULL,
  `precobase` decimal(11,2) default NULL,
  `precovenda` decimal(11,2) default NULL,
  `modalidadevenda` int(1) default NULL,
  PRIMARY KEY  (`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente,

 

Pesquisei muito o manual do MySQL e depois de algumas horas de teste, consegui montar a QUERY, que ficou assim:

 

QUERY

SELECT cast(`data` AS DATE ) AS `dia`, `vendedor`, SUM(`precovenda`) AS `somavendedor` 
FROM `log` 
GROUP BY cast( `data` AS DATE ), `vendedor` 
LIMIT 0,300

código simplificado que eu usei pra testar a query:

$sql = "SELECT cast(`data` AS DATE ) AS `dia`, `vendedor`, SUM(`precovenda`) AS `somavendedor` 
			FROM `log` 
			GROUP BY cast( `data` AS DATE ), `vendedor` 
			LIMIT 0,300"; 

  $result = mysql_query($sql, $link) or die (mysql_error());
  if ($row = mysql_fetch_array($result))
   {
	 do {
		 echo $row["dia"].' - ';
		 echo 'vendedor: '.$row["vendedor"]." - ";
		 echo 'Total dia: '.$row["somavendedor"]."<br>";
	 } while ($row = mysql_fetch_array($result)); 
	}

A query me devolve:

(`dia`)	(`vendedor`)	(`somavendedor`)

2008-07-29 - vendedor: 1 - Total dia: 28.60
2008-07-29 - vendedor: 2 - Total dia: 68.20
2008-08-02 - vendedor: 2 - Total dia: 17.60
2008-08-03 - vendedor: 2 - Total dia: 7.70

 

Agora minha dúvida é:

 

Se eu recebi do meu banco de dados:

(`dia`)	(`vendedor`)	(`somavendedor`)

2008-07-29 - vendedor: 1 - Total dia: 28.60
2008-07-29 - vendedor: 2 - Total dia: 68.20
2008-08-02 - vendedor: 2 - Total dia: 17.60
2008-08-03 - vendedor: 2 - Total dia: 7.70

Como montar um array bidimensional com esses dados, para montar uma tabela com eixo XY (X = `dia`, Y = `somavendedor`), com base nos dados dinâmicos que eu recebi do DB?

dia 	 	 | vendedor 1 | vendedor 2 | ...  | vendedor y
2008-07-29 	28,60		 68,15 	 	0.00	
2008-07-30 	0,00 	 	0,00 	 	 	0,00
2008-08-01 	0,00 	 	0,00 	 	 	0,00
2008-08-02 	0,00 	 	17,60	   	 0,00	
2008-08-03 	0,00 	 	7,70 	 	 	0,00
.
2008-08-xx 	0,00 	 	0,00 	 	 	0,00

soma 	 	28,60	   93,45 	 	 0,00

 

Meu objetivo é gerar tabela, gráficos e arquivo para exportar para o excel.

 

 

Alguém me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na boa.. Tem como postar a estrutura da tabela log?

 

Assim eu criaria uma tabela aqui e faria os testes =D

 

 

Tem sim :rolleyes:

 

Estrutura da tabela

--
-- Table structure for table `log`
--

CREATE TABLE IF NOT EXISTS `log` (
  `data` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `barras` varchar(13) default NULL,
  `loja` int(1) default NULL,
  `vendedor` int(2) default NULL,
  `precobase` decimal(11,2) default NULL,
  `precovenda` decimal(11,2) default NULL,
  `modalidadevenda` int(1) default NULL,
  PRIMARY KEY  (`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `log`
--

INSERT INTO `log` (`data`, `barras`, `loja`, `vendedor`, `precobase`, `precovenda`, `modalidadevenda`) VALUES
('2008-07-29 19:30:00', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 19:43:32', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 19:58:33', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 20:00:30', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 20:39:13', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 20:40:20', '0000000000011', 9, 2, 11.00, 8.80, 8),
('2008-07-29 20:45:08', '0000000000011', 9, 1, 11.00, 9.90, 7),
('2008-07-29 22:53:29', '0000000000011', 9, 1, 11.00, 8.80, 8),
('2008-07-29 22:55:23', '0000000000011', 9, 2, 11.00, 7.70, 1),
('2008-07-29 22:57:28', '0000000000011', 9, 2, 11.00, 7.70, 1),
('2008-07-29 23:21:06', '0000000000011', 9, 1, 11.00, 9.90, 7),
('2008-08-02 19:44:28', '0000000000011', 9, 2, 11.00, 9.90, 7),
('2008-08-02 19:46:23', '0000000000011', 9, 2, 11.00, 7.70, 1),
('2008-08-03 17:37:09', '0000000000011', 9, 2, 11.00, 7.70, 3);

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO

 

$sql = "SELECT cast(`data` AS DATE ) AS `dia`, `vendedor`, SUM(`precovenda`) AS `somavendedor` FROM `log` GROUP BY cast( `data` AS DATE ), `vendedor` LIMIT 0,300"; 
  $result = mysql_query($sql, $link) or die (mysql_error());

  if ($row = mysql_fetch_array($result))
   {
	 do {
	 $dia = $row["dia"];
	 $vendedor = $row["vendedor"];
	 $somavendedor = $row["somavendedor"];

	// Cria os vetores :  $vetorxy[dia][vendedor] = somavendedor
	$vetorxy[$dia][$vendedor] = $somavendedor;

	// Mostra o resultado na tela	 
 	echo $dia." ".$vendedor." ".$somavendedor." / ".$vetorxy[$dia][$vendedor]."<br>";

	 } while ($row = mysql_fetch_array($result)); 
	}

A função cast do MySQL foi usada para transformar TIMESTAMP em DATE (aaaa-mm-dd). Dai eu pude somar os valores com mesma data e com horas diferentes (totais do dia).

 

 

 

A QUERY foi escrita por mim após ampla pesquisa no manual do MySQL; Agradeço o empenho dos amigos do iMasters.

 

A solução dos vetores contou com a ajuda dos amigos do iMaster e da comunidade PHP Brasil do Orkut.

 

Agradecimentos em especial ao Renato Siroma (iMasters) e Fábio Costa (PHP Brasil Orkut).

 

Obrigada a 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.