Ir para conteúdo

POWERED BY:

Arquivado

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

André Monjardim

Ranking dos produtos mais vendidos nas 3 lojas

Recommended Posts

Olá, sou iniciante em PHP e mais iniciante ainda em mysql.
Tenho uma dúvida e gostaria de ajuda de vcs.Estou criando um sistema online onde posso verificar em ordem, os produtos  mais vendidos nas 3 lojas.Exemplo de como deve ficar:

Produto | Loja A| Loja B| Loja C| Total |

 

Arroz | 5 | 4 | 2 | 11 |

Feijão | 3 | 6 | 7 | 16 |

Oleo | 7 | 3 | 9 | 19 |

 

Gostaria de saber qual loja está vendendo mais os produtos e a quantidade, além de ter a soma do total vendido nas 3 lojas.

Estou postando parte do código que levará esse comando

 

<?php

$ssql = "SELECT * FROM snc_vendas GROUP BY produto";
$rs = mysql_query($ssql);
$num_total_registros = mysql_num_rows($rs);
while($row = mysql_fetch_array($rs)){
$id_venda = $row['id'];
$produto = $row['produto'];
$peso = $row['peso'];
$marca = $row['marca'];
$loja = $row['loja'];
// alternando as cores da tabela
$i++;
if($i % 2 == 0 ? $cor="f9f9cc" : $cor="fbe9e9")
echo "
<tr>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$produto - ($peso)</td>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$marca</td>";
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "A"){
echo "$num_total_registros</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "B"){
echo "$num_total_registros</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "C"){
echo "$num_total_registros</td>";
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT * SUM(campo-para-somar) AS total FROM sua-tabela   order by campo-para-somar DESC

 

Feito isso testa colocando os ifs dentro do while fazendo então a contagem.

Exemplo:

 

if ($loja == "A"){
   $cont1++;
}else if ($loja == "B"){
   $cont2++;
}
else{
   $cont3++;
}
 

É uma maneira. Porém sei que dá pra fazer isso com SQL, mas não tenho como testar aqui.

 

 

Acrescentando ...

Tenta com o group by:

SELECT * SUM(campo-para-somar) AS total FROM sua-tabela group by loja  order by campo-para-somar DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Marcos, mas não estou conseguindo das maneiras que me passou, como eu disse, sou novato em php.

 

mas coloquei assim e retorna um erro Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/meusite/public_html/admin/result_ranking_loja.php on line 27:

 

<?php
$ssql = "SELECT * SUM(produto) AS total FROM vendas group by loja order by produto DESC";
$rs = mysql_query($ssql);
while($row = mysql_fetch_array($rs)){
$id_venda = $row['id'];
$produto = $row['produto'];
$peso = $row['peso'];
$marca = $row['marca'];
$loja = $row['loja'];
echo "
<tr>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$produto - ($peso)</td>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$marca</td>";
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "A"){
echo "$cont1++</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "B"){
echo "$cont2++</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "C"){
echo "$cont3++</td>";
}
echo "</tr>";
echo "<tr><td colspan='5'><hr></td></tr>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare que criamos um "apelido" para o campo produto(total).

 

 
....
SELECT * SUM(produto) AS total FROM vendas group by loja order by produto DESC
//então recupere o valor da tupla como abaixo
$produto = $row['total'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mais próximo que consegui chegar foi assim;

 

 

 

 

<?php
$query = "SELECT *, COUNT(produto) FROM snc_vendas GROUP BY produto";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$produto = $row["produto"];
$id_venda = $row['id'];
$peso = $row['peso'];
$marca = $row['marca'];
$loja = $row['loja'];
$quantidade = $row['quantidade'];
// alternando as cores da tabela
$i++;
if($i % 2 == 0 ? $cor="f9f9cc" : $cor="fbe9e9")
echo "
<tr>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$produto - ($peso)</td>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$marca</td>";
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Vitória"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Praia da Costa"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Vila Velha"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
echo "</tr>";
echo "<tr><td colspan='6'><hr></td></tr>";
}
echo "</table>";
?>

 

A soma total está correta, mas na distribuição nas lojas não confere nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem uma olha tabela ja com as lojas?

Cara você tem uma lista de produtos ja defina?

 

- suponhamos que você tenha uma tabela com as lojas use INNER JOIN que fica facil.

- suponhamos que você não tenha uma tabela com as lojas usa CASE com SUM que rola tambem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ricardo, vc tem algum exemplo de como eu usaria isso pra adaptar no meu script?

 

Na mesma tabela estão as 3 lojas, produtos e quantidade vendidas, alem de outras coisas.... mas só esses 3 grupos que me interessam pra esse problema

 

Não mexerei com valores monetários nesse problema.. só mesmo a quantidade vendida em cada loja e no final o total de produtos vendidos. só isso! Servirá pra saber qual loja está vendendo mais cada produto.

 

Verifique nesse link como é.

http://www.flashmais.com.br/snc2/admin/result_ranking_loja.php

Nesse caso eu precisaria unir as linhas que contem o mesmo produto e nas colunas mostrariam os resultados de cada loja e no fim... o total

 

Só consegui chegar até nesse ponto.

 

 

<?php
$query = "SELECT *, COUNT(produto) FROM snc_vendas GROUP BY produto, loja";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$produto = $row["produto"];
$id_venda = $row['id'];
$peso = $row['peso'];
$marca = $row['marca'];
$loja = $row['loja'];
$quantidade = $row['quantidade'];
// alternando as cores da tabela
$i++;
if($i % 2 == 0 ? $cor="f9f9cc" : $cor="fbe9e9")
echo "
<tr>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$produto - ($peso)</td>
<td width='15%' scope='col' align='center' style='background-color:#$cor'>$marca</td>";
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Vitória"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Praia da Costa"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
if ($loja == "Vila Velha"){
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
}
echo "<td width='10%' scope='col' align='center' style='background-color:#$cor'>";
echo "". $row['COUNT(produto)'] ."";
echo "</td>";
echo "</tr>";
echo "<tr><td colspan='6'><hr></td></tr>";
}
echo "</table>";
?>
</table>

 

 

 

Desde já agradeço

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.