Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Noite Pessoal
Já procurei bem e não encontrei a solução para minha duvida ou nao soube aplicar o que eu vi em diversos sites.
Tenho a seguinte tabela no MySQL
ID - Curso - Modulo_A - Modulo_B - Modulo_C
1 Info Vendido Vendido Nao
2 HD Nao Vendido Nao
3 Web Nao Vendido Vendido
4 RH Vendido Vendido Nao
-------------
Simples neh?
Bom eu gostaria de contar quantas vezes o termo "Vendido" aparece na minha consulta.
Qual seria o codigo para isso?
Já tentei COUNT, DISTINCT entre outros... mas sem sucesso.
Partindo do principio basico abaixo, creio que esteja bem errado o codigo, mas não consegui sair disso.
$buscando_vendas = mysql_query("SELECT * FROM cursos WHERE Modulo_A = 'Vendido' OR Modulo_B = 'Vendido' OR Modulo_C = 'Vendido' ");
No exemplo do MYSQL acima, o retorno do PHP seria 7, pois tenho 7 vezes a palavra se repetindo.
Alguem pode me ajudar?
Hun, no caso eu nao poderia segmentar, pois o motivo de eu fazer a contagem de registros é para uma outra função que vai gerar uma conversão de vendas... então teoricamente essa duvida é para solucionar parte do script que estou montando.
No codigo acima ja resolveria minha questão ou é adaptado para a ideia de segmentação?? É que não estou em casa para testar agora rs
Muito obrigado pela disposição.
Abraços!
Sem solução ainda :/
Não funcionou.
Estou sem como testar aqui no PC
Algo como o exemplo abaixo não resolve?
select COUNT (Modulo_A,Modulo_B,Modulo_C) *
from cursos
WHERE Modulo_A = 'Vendido' OR Modulo_B = 'Vendido' OR Modulo_C = 'Vendido' ;Sem sucesso tambem.
Rodei o script no PHPMyAdmin para testar, ele retorna isso:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from cursos WHERE Modulo_A = 'Vendido' OR Modulo_B = 'Vendido' OR Modulo_C = 'V' at line 2
Ja trabalho com CASE no mysql resolve seu problema facil.
<?php
$buscando_vendas = mysql_query("SELECT sum(CASE WHEN Modulo_A = 'Vendido' THEN 1 ELSE 0 END) as total1, sum(CASE WHEN Modulo_B = 'Vendido' THEN 1 ELSE 0 END) as total2, sum(CASE WHEN Modulo_C = 'Vendido' THEN 1 ELSE 0 END) as total3 FROM cursos");
$listar_vendas = mysql_fetch_assoc($buscando_vendas);
$total_de_vendas = $listar_vendas['total1']+$listar_vendas['total2']+$listar_vendas['total3'];
?>
Espero ter ajudadoCara você é um gênio!
Perfeito!
Um dia chego n o seu patamar!!!!!
Muito Obrigado mesmo!
O meu problema se parece, mas estou tendo dificuldade de fechar o raciocínio.
No meu banco está assim:
ID - produto - qt_vend - loja
1 Arroz 5 lojaA
2 Feijão 3 lojaC
3 Óleo 2 lojaB
4 Óleo 6 lojaA
5 Feijão 4 lojaA
6 Arroz 3 lojaB
Gostaria de saber, partindo do grupo de "produto", a quantidade de peças vendidas em cada loja. Preciso saber qual loja está vendendo mais do que a outra.
Na tela, as linhas deverão acompanhar esses títulos:
Produto - lojaA - lojaB - lojaC - Total
Arroz 5 3 0 8
Feijão 4 0 3 7
Óleo 6 2 0 8
Alguém pode me dar uma ideia?
Já agradeço
Seguindo o mesmo raciocínio testa ae:
select t.*,
CASE t.loja
WHEN 'lojaA' THEN 'lojaA' as 'lojaA'
WHEN 'lojaB' THEN 'lojaB' as 'lojaB'
ELSE 'lojac' AS 'lojaC'
END
FROM TABELA C
obs : não testei
Leituras recomendadas:
[http://imasters.com.br/artigo/18681/mysql/utilizando-select-case-com-mysql/](http://imasters.com.br/artigo/18681/mysql/utilizando-select-case-com-mysql/)
[http://www.portaleducacao.com.br/informatica/artigos/6356/utilizando-a-clausula-case-em-um-select-sql-server](http://www.portaleducacao.com.br/informatica/artigos/6356/utilizando-a-clausula-case-em-um-select-sql-server)
[https://www.google.com/#hl=pt&output=search&sclient=psy-ab&q=select+case&oq=select+case&gs_l=hp.3..0i19l4.820.820.0.3508.1.1.0.0.0.0.283.283.2-1.1.0...0.0...1c.1.7.psy-ab.F0pqmqyMSEM&pbx=1&bav=on.2,or.r_qf.&bvm=bv.44011176,d.eWU&fp=4f1475800b183f00&biw=1024&bih=626](https://www.google.com/#hl=pt&output=search&sclient=psy-ab&q=select+case&oq=select+case&gs_l=hp.3..0i19l4.820.820.0.3508.1.1.0.0.0.0.283.283.2-1.1.0...0.0...1c.1.7.psy-ab.F0pqmqyMSEM&pbx=1&bav=on.2,or.r_qf.&bvm=bv.44011176,d.eWU&fp=4f1475800b183f00&biw=1024&bih=626)É tá complicado mesmo isso pra mim.. já li tudo que me mandaram ler e realmente me falta mais conhecimento pra achar a solução.
Pior que não acho nenhum exemplo parecido com o que preciso.
Bom... obrigado a todos!
Não acha porque, como eu já disse no post #2, o ideal é normalizar as informações.
Para o seu caso você deveria ter três tabelas
Produto, Loja, Vendas.
Uma Loja pode vender N produtos.
Um produto pode ser vendido por N lojas.
Isso é um relacionamento N-N. Por isso a necessidade da tabela Vendas.
CREATE TABLE `loja` (
`id` smallint(2) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `produto` (
`id` smallint(2) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `venda` (
`id` mediumint(4) unsigned NOT NULL AUTO_INCREMENT,
`loja` smallint(2) unsigned NOT NULL,
`produto` smallint(2) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `loja` (`loja`),
KEY `produto` (`produto`),
CONSTRAINT `venda_ibfk_1` FOREIGN KEY (`loja`) REFERENCES `loja` (`id`) ON DELETE CASCADE,
CONSTRAINT `venda_ibfk_2` FOREIGN KEY (`produto`) REFERENCES `produto` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
As consultas ficariam muito simples
select loja.nome, produto.nome from venda inner join loja on loja.id = venda.loja inner join produto on produto.id = venda.produto
eu tenho somente duas tabelas... produtos e vendas.
Nessa tabela "vendas" está a finalização de tudo... já tá pronto, só que tenho a necessidade de pegar a loja que mais está vendendo os produtos.
Dá uma olhada nesse print.
Tabela "vendas"
http://www.flashmais.com.br/snc2/imagens/tabela.jpg
Só preciso das colunas, loja, produto e quantidade
Assim >>> http://www.flashmais.com.br/snc2/admin/result_ranking_loja.php
Agrupar a coluna "produto" e mostrar na tela a quantidade que esses produtos aparecem em cada loja.
o que tá complicando é que se caso o cliente comprar 2 ou mais unidades de um produto, terei que multiplicar esse nº antes de formatar a execução das lojas.
Eu acho que é isso aqui:
loja, produto, sum(quantidade) from vendas group by produto, loja
Evandro... é quase isso! O que estou tendo de retorno são as linhas dos produtos especificando cada vez que aparece nas lojas, ou seja toda vez que há uma venda daquele produto ele joga numa linha e não é isso. preciso de uma linha pra cada produto, então fiz o seguinte, tirei a "loja" dos grupos e deixei somente o "produto"... me retornou quase o que preciso. As lojas, na verdade só entram no "IF" como indicativos, pois já constam nas linhas dos produtos na tabela. Nesse caso o "CONT" ou "SUM" deram o mesmo resultado. ficou assim:
**$query = "SELECT *, COUNT(produto) FROM snc_vendas GROUP BY produto";**
ou
**$query = "SELECT *, SUM(quantidade) FROM snc_vendas GROUP BY produto"; **
(Tive que colocar o "asterístico" pois preciso das demais colunas do banco, como "marca" e "peso", mas não entram nesse calculo)
Tenho que:
1º - multiplicar o "produto" pela "quantidade".
2º - separar por grupos de "produto" e somar quantas vezes eles aparecem em cada "loja".
3º - somar geral a "quantidade" vendida daquele "produto" em todas as 3 lojas.
exemplo: http://www.flashmais.com.br/snc2/admin/result_ranking_loja.php
Parece ser simples, mas pra mim que sou iniciante parece algo do outro mundo. Até pra explicar eu me enrolo todo! rs
Vamos estudar normalização de dados galera!! A gente fala :- É só duas tabelas com algumas tuplas/campos! Porém essas duas, podem gerir outras tabelas, mas, que facilitam a vida na hora de fazer uma consulta, simples ou avançada.
>
Tenho que:
1º - multiplicar o "produto" pela "quantidade".
Não dá pra multiplicar uma string por um número
mysql> select 'string' * 2;
+--------------+
| 'string' * 2 |
+--------------+
| 0 |
+--------------+
1 row in set, 1 warning (0,00 sec)
2º - separar por grupos de "produto" e somar quantas vezes eles aparecem em cada "loja".
count(produto) group by loja, produto
3º - somar geral a "quantidade" vendida daquele "produto" em todas as 3 lojas.
count(produto) group by produto
Como há dois agrupamentos, você devera fazer subconsultas ou views
select (produto * quantidade) as "Não dá pra multiplicar strings por números", loja, produto, count(produto) as vendidos, sub.total_vendidos from vendas, (select produto, count(produto) as total_vendidos group by produto) as sub where vendas.produto = sub.produto;
Obviamente não testei. Mas a lógica é essa.Evandro, pela lógica... é por ai... o problema é multiplicar um nome pela quantidade, mas vou testar qdo chegar em casa.
Marcos. a "tabela" loja nesse caso eu substituí por "IFs"
If ($loja == "Vitória")...
If ($loja == "Praia da Costa")...
If ($loja == "Vila Velha")...
Eu tenho um problema parecido, Vocês Poderiam Me ajudar???
Eu tenho uma tabela em meu banco de dados, a tabela tem o nome de usuário e o banco de dados tem o nome votar.
Na tabela eu tenho as colunas: usuário_id, E-mail, voto.
eu queria algo em php que contasse quantas veses aparece o mesmo numero na coluna voto. Por Favor alguém me ajude!!!
@Andre Ghisleni Raimann esse trecho aqui deve te ajudar:
<?php
$servername = "localhost";
$username = "seuuser";
$password = "suasenha";
$dbname = "seubanco";
$con = new mysqli($servername,$username,$password,$dbname);
$sql = "SELECT * FROM usuario WHERE voto='informe_o_voto_para_contar'";
$result = $con->query($sql);
$qtd_voto = mysqli_num_rows($result);
$con->close();
?>
Faz a conexão no banco e com **mysqli_num_rows** o código retorna a quantidade de votos que foram encontrados no banco de dados.Boa tarde,
Andre Ghisleni, qual SGBD você usa?? MySql?
Se for, fiz um teste aqui!
Não sei se é isso que você quer, mas vamos lá!!!
Você pode utilizar a função count na consulta do banco.
Exemplo:
$sql = "select count(*) as quantidade from usuario where voto = 20";
$query = $conexao->query($sql);
$dados = $query->fetch_assoc();
echo "Quantidade: ".$dados['quantidade'];
Acredito que seja mais ou menos isso, fiz a conexão com o mysql utilizando o mysqlinão funcionou...
O ideal seria segmentar os dados. Supondo que apenas o curso de Web vá ter o módulo 4, todos os outros vão carregar essa coluna desnecessariamente.
Bom, para resolver este cenário ficaria assim
select sum((Modulo_A = 'Vendido') + (Modulo_B = 'Vendido') + (Modulo_C = 'Vendido')) from cursos;
+-------------------------------------------------------------------------------+
| sum((Modulo_A = 'Vendido') + (Modulo_B = 'Vendido') + (Modulo_C = 'Vendido')) |
+-------------------------------------------------------------------------------+
| 7 |
+-------------------------------------------------------------------------------+
1 row in set (0,00 sec)