Calcular Os Produtos Mais Vendidos

Quem trabalha desenvolvendo sites e sistemas para a Internet, uma hora ou outra receberá um desafio!

Um dos sistemas que desenvolvi ao longo de minha carreira, foi um ecommerce! Você pode falar: Puxa, eu que tenho muito menos tempo de experiência e já desenvolvi algo similar. Sim, mas o primeiro que você desenvolve é sempre mais complicado, correto?

Como vários desenvolvedores já sabem, o serviço de programação (seja qual for a linguagem) é: 90% Base de Dados e 10% Programação. Por esse motivo, abaixo vamos dar um exemplo que sustentam essa idéia, onde criaremos um pequeno script que calcula número de produtos vendidos.

Como fazemos em todas as nossas matérias, em anexo temos disponível os ficheiros para que possas estudar e testar o conteúdo da matéria.

Criando As Tabelas Na Base De Dados MySQL

Antes de partirmos para a programação, vamos criar uma tabelinha simples, só para rodarmos a solução que estamos a criar.

Para isso, pegue o conteúdo do ficheiro script-sql.txt (disponível em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

Em nossas matérias utilizamos como padrão o MySQLFront ou o PHPMyAdmin. Caso tu também esteja utilizando outra solução é só colar o conteúdo no SQL Editor (conforme código abaixo).


----- CRIA A TABELA CARRINHO -----

CREATE TABLE `tbl_carrinho` (
  `id_compra` int(4) NOT NULL auto_increment,
  `id_produto` int(5) default '0',
  `sessao` varchar(100) default '0',
  `qtde` int(5) default '0',
  `data` varchar(11) default '0',
  PRIMARY KEY  (`id_compra`)
);

INSERT INTO `tbl_carrinho` VALUES (67,71,'63552',1,'2010-13-08');
INSERT INTO `tbl_carrinho` VALUES (68,73,'',45,'2010-15-08');
INSERT INTO `tbl_carrinho` VALUES (69,68,'88181',95,'2010-15-08');
INSERT INTO `tbl_carrinho` VALUES (70,74,'',33,'2010-18-08');
INSERT INTO `tbl_carrinho` VALUES (71,72,'',9,'2010-25-08');
INSERT INTO `tbl_carrinho` VALUES (76,73,'0',44,'2010-25-08');

----- CRIA A TABELA DE PRODUTOS -----
CREATE TABLE `tbl_produtos` (
  `id_produto` int(11) NOT NULL auto_increment,
  `id_subcategoria` int(11) default '0',
  `nome` varchar(150) default NULL,
  `descricao` text,
  `imagem1` varchar(200) default NULL,
  `preco_atual` decimal(10,2) default NULL,
  `status` int(1) default '0',
  PRIMARY KEY  (`id_produto`)
);

INSERT INTO `tbl_produtos` VALUES (68,1,'Produto 03','teste teste teste teste','1222299712-120x120-mai15061_62.jpg',10,1);
INSERT INTO `tbl_produtos` VALUES (69,1,'Produto 04','teste teste teste teste','1220666941-120x120-ea166698.jpg',25,1);
INSERT INTO `tbl_produtos` VALUES (70,1,'Produto 05','teste teste teste teste','1225836367-120x120-ft3018.jpg',10,1);
INSERT INTO `tbl_produtos` VALUES (71,1,'Produto 06','teste teste teste teste','1278626413_1218245569-120x120-ea11263.jpg',10,1);
INSERT INTO `tbl_produtos` VALUES (72,1,'Produto 07','teste teste teste teste','1219365607-120x120-clo11044.jpg',25,1);
INSERT INTO `tbl_produtos` VALUES (73,1,'Produto 08','teste teste teste teste','1227971872-120x120-clo06217.jpg',10,1);
INSERT INTO `tbl_produtos` VALUES (74,2,'Produto 02','teste teste teste teste','1278626448_1216074858-120x120-clo02224.jpg',20,1);
INSERT INTO `tbl_produtos` VALUES (164,0,'','','',0,1);
INSERT INTO `tbl_produtos` VALUES (166,0,'','','',0,1);
INSERT INTO `tbl_produtos` VALUES (167,0,'','','',0,1);
INSERT INTO `tbl_produtos` VALUES (168,1,'Produto Exemplo','<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',6,1);
INSERT INTO `tbl_produtos` VALUES (169,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',6,1);
INSERT INTO `tbl_produtos` VALUES (170,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',12,1);
INSERT INTO `tbl_produtos` VALUES (171,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',2,1);
INSERT INTO `tbl_produtos` VALUES (172,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',8,1);
INSERT INTO `tbl_produtos` VALUES (173,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',8,1);
INSERT INTO `tbl_produtos` VALUES (174,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',4,1);
INSERT INTO `tbl_produtos` VALUES (175,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',32,1);
INSERT INTO `tbl_produtos` VALUES (176,1,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',2,1);
INSERT INTO `tbl_produtos` VALUES (177,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',4,1);
INSERT INTO `tbl_produtos` VALUES (178,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',2,1);
INSERT INTO `tbl_produtos` VALUES (179,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',4,1);
INSERT INTO `tbl_produtos` VALUES (180,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',4,1);
INSERT INTO `tbl_produtos` VALUES (181,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',8,1);
INSERT INTO `tbl_produtos` VALUES (182,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',19,1);
INSERT INTO `tbl_produtos` VALUES (183,2,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',8,1);
INSERT INTO `tbl_produtos` VALUES (184,3,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',1,1);
INSERT INTO `tbl_produtos` VALUES (185,3,'Produto Exemplo','  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  dictum lorem sed urna. Suspendisse mattis lectus. Praesent quis leo  vitae tortor placerat fermentum. Aliquam urna. Nunc pharetra. Ut  vehicula sagittis orci. Aenean euismod aliquam massa. Vivamus</p>','produto_detalhes.jpg',0,1);

Após criar a tabela e importar os dados disponíveis acima, você poderá configurar o script de conexão à base de dados.

Configurando O Script De Conexão

Para efetuar a configuração devida, acesse o script “conexao.php” e siga o exemplo a seguir:


<?

$database = "SERVIDOR"; // NOME DO SERVIDOR
$dbname   = "BASEDEDADOS"; // NOME DA BASE DE DADOS
$usuario  = "USUARIO"; // USUARIO DO MYSQL
$dbsenha  = "SENHA"; // SENHA DO USUARIO MYSQL

$conexao=mysql_connect ($database, $usuario, $dbsenha);

if($conexao){
      if (mysql_select_db($dbname, $conexao)){
           print "";
      }else{
           print "Não foi possível selecionar o Banco de Dados";
           }
      }else{
           print "Erro ao conectar o MySQL";
           }
?>

Após efetuar essa configuração, vamos conhecer o script que fará o select personalizado trazendo os produtos mais vendidos?

Calcular Os Produtos Mais Vendidos

O script abaixo não tem segredo. Para implementar à sua solução, basta entender um pouco de PHP e seguir o que está descrito no SELECT (conforme o script abaixo).


SELECT SUM(qtde) AS qtde,
   id_produto FROM tbl_carrinho
       GROUP BY id_produto order by qtde desc

Observações:

Veja que acima buscamos dentro do “SUM” o campo qtde. Agrupamos por “id” e Ordenamos pela quantidade.

Abaixo você pode conferir como ficou o script!


<STYLE type=text/css>
.texto11 {
  FONT-FAMILY: Arial; FONT-SIZE: 11px
}
</style>
<? include('conexao.php'); ?>
<table class="texto11" border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="imagens/cabecalho_maisvendido.gif" border="0" alt="" width="157" height="20" /></td>
  </tr>
</table>
<table class="texto11" border="0" width="100%" cellspacing="0" cellpadding="4" style='background-image:url(imagens/bg_meio3.gif);background-repeat:repeat-y;color:#000000;'>
  <tr>
    <td><table class="texto11" border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
  
    <td>
    <MARQUEE behavior= "scroll" align= "center" direction= "up" height="160" scrollamount= "2" scrolldelay= "20" onmouseover='this.stop()' onmouseout='this.start()'>
    <table border="0" width="100%" cellspacing="0" cellpadding="1" class="texto11" align="center">
       <?

    $query_maisvendidos = "SELECT SUM(qtde) AS qtde, id_produto FROM tbl_carrinho GROUP BY id_produto order by qtde desc";
    $rs_maisvendidos    = mysql_query($query_maisvendidos);
    //$numero = 1;

    while($campo_maisvendidos = mysql_fetch_array($rs_maisvendidos)){
    $id_produtomaisvendido = $campo_maisvendidos['id_produto'];
    $qtde_produtomaisvendido = $campo_maisvendidos['qtde'];

    $query_produto = "SELECT * FROM tbl_produtos where id_produto = '$id_produtomaisvendido'";
    $rs_produto    = mysql_query($query_produto);

    while($campo_produto = mysql_fetch_array($rs_produto)){
    $id_produto      = $campo_produto['id_produto'];
    $id_subcategoria = $campo_produto['id_subcategoria'];
    $nome_produto    = $campo_produto['nome'];
    $imagem1_produto = $campo_produto['imagem1'];

    ?>

    <tr><td valign="top"><?= $numero; ?></td>
    <td><a href="#" title='<?= $qtde_produtomaisvendido; ?> Produtos Solicitados'><img src="thumb.php?file=imagens/produtos/<?if ($imagem1_produto != ""){ echo $imagem1_produto; }else{ echo "sem_imagem.jpg"; }?>&size=120&quality=100&nocache=0" border="0"></a><br /><a style="color:#000000"
    href="#" title='<?= $qtde_produtomaisvendido; ?> Produtos Solicitados'><?= $nome_produto; ?></a></td></tr>

    <?
    $numero++;
    }
    }
    ?>
    </table></MARQUEE></td>

  </tr>
</table>
</td>
  </tr>
</table>
<table class="texto11" border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="imagens/bg_rodape3.gif" border="0" alt="" width="157" height="15" /></td>
  </tr>
</table>

Na hora de testar, você verá que ao passar o mouse em cima da imagem ou no nome do Produto, o sistema trará a quantidade de Produtos.

produtos mais vendidos

Claro, como um bom desenvolvedor, você não vai deixar desta maneira em sua Loja virtual (principalmente se forem poucos produtos); É só para você testar a solução.

Espero que esse script lhe seja útil e prático no dia a dia. Ok?

ficheiros.zip

Be Sociable, Share!

Participa! Comenta...