Ir para conteúdo

Arquivado

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

Mr. Borges

Contar Valores Iguais de Varias Colunas

Recommended Posts

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?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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' ;
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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")...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

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.