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”):
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";
}
?>