Ir para conteúdo

POWERED BY:

Arquivado

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

Alisson Jenzura

Problema com INNER JOIN

Recommended Posts

Boa Tarde galera, estou com um problema aqui um pouco complicado de explicar, mas vou tentar:

 

Tenho as tabelas "categories" e "empresa".

Tenho um menu dinâmico que exibe apenas a categoria em que exista uma empresa cadastrada nela. Para essa conexão, uso o Inner join

$query_categorias = "SELECT * FROM categories INNER JOIN empresa WHERE categories.categoria = empresa.Categoria AND empresa.Ativo = 'sim' ORDER BY categories.categoria ASC  ";

O problema é que quando existe mais de uma empresa cadastrada na mesma categoria, as categorias são exibidas mais de uma vez.

Ex: Tenho 2 empresas cadastradas Na CATEGORIA X, 1 na CATEGORIA Y e 1 na CATEGORIA Z

e é exibido assim:

Menu Categorias

CATEGORIA X

CATEGORIA X

CATEGORIA Y

CATEGORIA Z

 

E eu gostaria que mesmo existindo mais de 1 empresa cadastrada na CATEGORIA X, a mesma fosse exibida apenas 1 vez:

Menu categorias

CATEGORIA X

CATEGORIA Y

CATEGORIA Z

 

Deu pra entender? alguém pode me ajudar com isso?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe vários modos de resolver o seu problema, o mais simples é através de INNER JOIN, não exibir a empresa e usar distinct.

 

Nesse caso, você não deve usar apenas o asterisco

"SELECT DISTINCT categories.* ..."

Outro modo é pelo group by, como já foi mencionado.

 

E por último, mas não menos importante, você pode remover através de um subselect, realizando um count da tabela empresa e só exibir somente quando for maior que zero.

SELECT 
    * 
FROM 
    categories C
WHERE
    (SELECT count(*) FROM empresa WHERE ativo = 'sim' AND categoria = C.categoria) > 0

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.