Ir para conteúdo

POWERED BY:

Arquivado

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

matheusmarson

Problema com consulta com Left Join

Recommended Posts

Senhores tenho uma consulta que deveria me retornar a categoria que se encontra o anuncio + a quantidade de anuncios que existem nesta categoria.Só que não está me retornando nadaSerá que alguém poderia me dar uma ajuda?a consulta é a seguinte:$sql = mysql_query("SELECT c.id, c.categoria, COUNT(an.id_categoria) as anunc FROM servicos_categorias c, anuncios_tags t, clientes cl, anuncios a LEFT JOIN anuncios an ON an.id_categoria=c.id WHERE t.id_anuncio=a.id AND cl.id=a.id_cliente AND (t.tags like '%$palavra_chave%' OR a.texto like '%$palavra_chave%' OR cl.razao_social like '%$palavra_chave%' OR cl.nome_fantasia like '%$palavra_chave%') GROUP BY c.id ORDER BY c.categoria");agradeço pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 observações:

 

1-) Sua consulta não deve estar apresentando resultados por cauda do seu LIKE...verifique isso.

2-) Essa sua consulta, em uma leitura lógica, retornará tudo que tem nas tabelas servicos_categorias c, anuncios_tags t, clientes cl, anuncios que tenham valores associados ou não com anuncios.

 

Na verdade, para te facilitar, faça a consulta por partes...primeiro, antes de fazer associações de tabelas, conte o que deseja contar, e depois traga os campos. Faça os teste primeiro só na tabela que é objeto direto da pesquisa, depois faça o Join...

 

Caso precise mais ajuda, coloque aqui as tabelas! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Abração!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

WagnerTentei de várias maneiras e nadaO que eu realmente quero é que seja exibida a cidade e a quantidade de anuncios existentes na cidade, mas que estejam dentro de uma determinada categoria e uma subcategoria.Segue a estrutura das tabelasCREATE TABLE `anuncios` ( `id` int(11) NOT NULL auto_increment, `tipo_anuncio` enum('1','2','3','4','5','6','7') default '1' COMMENT 'Tipo do Anuncio (1-Simples, 2-Destacado, etc...)', `texto` longtext COMMENT 'Texto do Anúncio', `logotipo` varchar(120) default NULL COMMENT 'Nome do arquivo do logotipo do cliente', `qtde_fotos` int(2) default NULL COMMENT 'Quantidade de Fotos do cliente', `qtde_videos` int(1) default NULL COMMENT 'Quandidade de Videos do cliente', `coordenadas_mapa_a` varchar(20) default NULL, `coordenadas_mapa_b` varchar(20) default NULL, `id_categoria` int(11) default NULL, `id_subcategoria` int(11) default NULL, `id_cliente` int(11) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `anuncios_tags` ( `id` int(11) NOT NULL auto_increment, `tags` varchar(255) default NULL, `id_anuncio` int(11) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `clientes` ( `id` int(11) NOT NULL auto_increment, `tipo` enum('CPF','CNPJ') default 'CNPJ' COMMENT 'Tipo de pessoa (fisica ou juridica)', `documento` varchar(50) default NULL COMMENT 'CPF ou CNPJ', `razao_social` varchar(255) default '' COMMENT 'Razão social ou nome do cliente', `nome_fantasia` varchar(150) default '' COMMENT 'Nome Fantasia ou Sobrenome do cliente', `nome_contato` varchar(100) default NULL COMMENT 'Nome da pessoa para contato', `data_insercao` date default '0000-00-00' COMMENT 'Data de inclusão do cliente no site', `observacoes` longtext COMMENT 'Observacoes internas do cliente', `login` varchar(125) default NULL COMMENT 'Email de cadastro do cliente', `senha` varchar(50) default NULL COMMENT 'Senha de acesso do cliente', PRIMARY KEY (`id`), UNIQUE KEY `documento` (`documento`), UNIQUE KEY `email` (`login`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `contatos` ( `id` int(11) NOT NULL auto_increment, `fone_residencial` varchar(40) default NULL, `fone_comercial` varchar(40) default NULL, `fone_recado` varchar(40) default NULL, `celular` varchar(40) default NULL, `fax` varchar(40) default NULL, `fone_0800` varchar(20) default NULL, `email_alternativo` varchar(75) default NULL, `msn` varchar(40) default NULL, `skype` varchar(50) default NULL, `site` varchar(100) default NULL, `id_cliente` int(11) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `enderecos` ( `id` int(11) NOT NULL auto_increment, `endereco` varchar(175) default NULL COMMENT 'Endereco do cliente (rua, av)', `numero` int(7) default NULL, `complemento` varchar(75) default '', `bairro` varchar(40) default NULL, `cep` varchar(10) default '00.000-000', `id_cidade` int(11) default NULL, `id_cliente` int(11) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `enderecos_cidades` ( `id` int(11) NOT NULL auto_increment, `cidade` varchar(70) default NULL, `sigla_estado` varchar(2) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `enderecos_estados` ( `id` int(11) NOT NULL auto_increment, `estado` varchar(25) default NULL, `sigla` varchar(2) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `sigla` (`sigla`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `servicos_categorias` ( `id` int(11) NOT NULL auto_increment, `categoria` varchar(150) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `servicos_subcategorias` ( `id` int(11) NOT NULL auto_increment, `subcategoria` varchar(200) default NULL, `id_categoria` int(11) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;Desde ´já agradeço pela sua atençãoAh!, você teria aí algum bom tutorial, ou apostila sobre o uso de join nas consultas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não pude te ajudar pq não entendi os dados que você quer retornar e principalmente os dados que você passa para fazer a consulta.

Explique melhor o sistema (o que é, onde esta sendo usado) e o que você quer exibir,

lembrando que o LEFT JOIN LISTA os dados de acordo com o que estiver na cláusula ON, se não tiver nenhum dado (desde que obedecendo a cláusula ON) ele vai retornar NULL mesmo.

 

e so 1 observação nas minhas consultas sempre quando estou usando algum JOIN não uso o WHERE continuo no AND

por exemplo:

 

O que você postou:

"SELECT c.id, c.categoria, COUNT(an.id_categoria) as anunc

FROM servicos_categorias c, anuncios_tags t, clientes cl, anuncios a

LEFT JOIN anuncios an

ON an.id_categoria=c.id

WHERE t.id_anuncio=a.id AND cl.id=a.id_cliente AND (t.tags like '%$palavra_chave%' OR a.texto like '%$palavra_chave%' OR cl.razao_social like '%$palavra_chave%' OR cl.nome_fantasia like '%$palavra_chave%')

GROUP BY c.id

ORDER BY c.categoria"

 

Como eu costumo fazer:

 

"SELECT c.id, c.categoria, COUNT(an.id_categoria) as anunc

FROM servicos_categorias c, anuncios_tags t, clientes cl, anuncios a

LEFT JOIN anuncios an

ON an.id_categoria=c.id

AND t.id_anuncio=a.id AND cl.id=a.id_cliente AND (t.tags like '%$palavra_chave%' OR a.texto like '%$palavra_chave%' OR cl.razao_social like '%$palavra_chave%' OR cl.nome_fantasia like '%$palavra_chave%')

GROUP BY c.id

ORDER BY c.categoria"

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.