Ir para conteúdo

Arquivado

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

Helinho Coelho

Fazer um SELECT para filtrar valores diferentes de uma mesma COLUNA

Recommended Posts

Olá!

 

Preciso filtrar valores diferentes que estão em uma mesma COLUNA dentro de uma TABELA. Estou tentando fazer um SELECT e não consigo filtrar corretamente. Saca só!


TABELA orcamento
COLUNA empresa
COLUNA cidade_equipamento

 

empresa	| cidade_equipamento
A	| BRASILIA
A	| Caçamba
A	| Empilhadeira
B	| CURITIBA
B	| Caçamba

 

$cidade = BRASILIA
$equipamento = Caçamba,Empilhadeira

 

Obs: preciso pegar a empresa que seja de BRASILIA e que tenha ou Caçamba ou Empilhadeira. Mas precisa ser de BRASILIA.

 

 

Fiz assim:

"SELECT * FROM orcamento WHERE cidade_equipamento = $cidade OR cidade_equipamento in ($equipamento) GROUP BY empresa"

Com esse select a empresa (B) tá retornando (por conta do equipamento Caçamba) e eu gostaria que só retornasse a empresa (A) que é de BRASÍLIA.

 

Eu também tentei usar o AND ao invés do OR e retornou vazio:

...WHERE cidade_equipamento = $cidade AND cidade_equipamento in ($equipamento) GROUP BY empresa"


=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo de como fazer IF's direto no select

 

if( NomeColuna=sabao, NomeColuna, null) as produto1
count(if( NomeColuna=sabao, NomeColuna, null)) as totalProduto1,

 

Para buscar mais de um registro

 

if( NomeColuna in (sabao,amaciante,detergente), NomeColuna , null)) as produtoLimpeza,
count(if( NomeColuna in (sabao,amaciante,detergente), NomeColuna, null)) as totalProdutoLimpeza,

 

Mas no seu caso acredito que se aplica mais um GROUP BY 

Mas pelo seu esquema de tabela, eu recomendaria você ter mais uma coluna ficando

 

EMPRESA | CIDADE | UF | EQUIPAMENTO

 

Assim acredito que seria o mais coerente de se ter para poder agrupar os dados da melhor forma

Compartilhar este post


Link para o post
Compartilhar em outros sites
if( cidade_equipamento in ($equipamento), cidade_equipamento , null)) as CampoX,
count(if( cidade_equipamento in ($equipamento), cidade_equipamento, null)) as totalCampoX,

Onde que entram as cidades? Você entendeu que as Cidades e os Equipamentos estão na mesma coluna?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você vai poder fazer é no esquema que te mostrei dos IFs fazer algo do tipo

if( cidade_equipamento in ($equipamento), cidade_equipamento , null)) as equipamento, count(if( cidade_equipamento in ($equipamento), cidade_equipamento, null)) as totalEquipamento,
if( cidade_equipamento in ($cidade), cidade_equipamento , null)) as cidade, count(if( cidade_equipamento in ($cidade), cidade_equipamento, null)) as totalCidade,

Dessa forma você consegue dar um while separando a cidade em cidade e equipamento em equipamento.
E na apresentação dos dados, tratar com ifs do php os dados que vierem vazios/null

 

Como as informações estão tudo numa unica linha e tais informações devem ser categorizadas - de acordo com a solicitação do seu cliente - você vai ter que fazer uma "gambiarra".

 

Sem a separação por colunas, você vai trabalhar no modo gambiarra.

Seria interessante explicar isso ao seu cliente e sugerir a mudança porque deste jeito a longo prazo ficará praticamente impossivel categorizar e agrupar dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um modelo ruim torna uma sql simples em algo complicado de forma desnecessária , altere o modelo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gato Mia...

 

Ponto 1 -  Vai ser necessario um tratamento no PHP, como colocar aspas

Ponto 2 -  Seu codigo pode ficar vulneravel a SQL Inject

Ponto 3 - Como disse o Motta é melhor refazer esse modelo tem dois campos distintos  no mesmo campo misturados.

 

select c.empresa 
from orcamento c , orcamento e
where 
c.cidade_equipamento = $cidade
and e.cidade_equipamento in ($equipamento)
and c.empresa = e.empresa

 

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.