terça-feira, 26 de fevereiro de 2019

Relatórios de vendas com PHP, PDO e Mysql


Relatórios de vendas com PHP, PDO e o banco de dados Mysql não são difíceis de fazer. Neste tutorial, vamos criar um relatório que apresentará as maiores vendas do último mês separadas por cliente, e também as maiores vendas por cliente.
O relacionamento de tabelas é utilizado para exibir os nomes dos clientes. O primeiro passo é criar as tabelas de vendas e de clientes; vamos começar bem simples, e lembre-se de que o “id” do cliente deverá constar da tabela de vendas (coluna “cod_cliente”):

CREATE TABLE `clientes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nome` varchar(80) DEFAULT NULL,
  `cpf` varchar(6) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

CREATE TABLE `vendas` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `cod_cliente` int(10) DEFAULT NULL,
  `produto` int(10) DEFAULT NULL,
  `dia` date DEFAULT NULL,
  `valor` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

Preencha alguns registros. Como teste, vamos criar uma instrução SQL que exibirá as maiores vendas para cada cliente:

select nome, max(valor), dia
from clientes join vendas
on clientes.id=vendas.cod_cliente
group by cod_cliente;

Se tudo estiver “ok”, podemos incluir o mês anterior ao atual (linhas 4 e 5):

1.  select nome, max(valor), dia
2.  from clientes join vendas
3.  on clientes.id=vendas.cod_cliente
4.  where month(dia)=month(date_sub(curdate(), interval 1 month))
5.  and year(dia)=year(curdate())
6.  group by cod_cliente;

Agora só falta criar uma página PHP para exibir esses dados:

<?php
//conexão PDO

echo "<h3>Maiores vendas por cliente</h3>";
$sql1=$con->prepare("select nome, max(valor) maior_compra, dia from clientes join vendas on clientes.id=vendas.cod_cliente group by cod_cliente");
$sql1->execute();
while($linha1=$sql1->fetch(PDO::FETCH_ASSOC)){
echo $linha1['nome']." - ";
echo $linha1['maior_compra']." - ";
echo $linha1['dia']."<br>";
}

echo "<h3>Maiores vendas por cliente no mês passado:</h3>";

$sql2=$con->prepare("select nome, max(valor) maior_compra, dia from clientes join vendas
on clientes.id=vendas.cod_cliente where month(dia)=month(date_sub(curdate(), interval 1 month)) and year(dia)=year(curdate()) group by cod_cliente");
$sql2->execute();

$count = $sql2->rowCount();
if($count>0)
{
while($linha2=$sql2->fetch(PDO::FETCH_ASSOC)){
echo $linha2['nome']." - ";
echo $linha2['maior_compra']." - ";
echo $linha2['dia']."<br>";
} }
else
{echo "não há vendas no mês passado";
}
 
?>

E é isso, pessoal; boa sorte e até +