Ir para conteúdo

POWERED BY:

Arquivado

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

Alcir Lima

Problema na consulta em duas tabelas para site de classificados

Recommended Posts

Oi, tudo bem?Estou com um probleminha aqui, nao estou conseguindo resolver um problema... Você pode me ajudar?O problema é o seguinte:Tenho duas tabelas:anuncios(cod*, modelo, ano, preco, etc...)anuncios_opcionais (cod*, cod_anuncio**, cod_opcional)*PK**FKQuero fazer uma busca na tabela anuncios que me os dados que contenham no minimo os valores de "cod_opcional" sendo "1", "3", "4".Vamos imaginar a situação:tabela anuncio(cod, modelo, ano, preco, etc...)linha 1 => (1 , golf , 1999 , 15000 , etc...)linha 2 => (2 , celta , 2002 , 16000 , etc...)linha 3 => (3 , clio , 2005 , 30000 , etc...)tabela anuncios_opcionais(cod,cod_anuncio,cod_opcional)linha 1 => (1 , 1 , 1)linha 2 => (2 , 1 , 3)linha 3 => (3 , 1 , 4)linha 4 => (4 , 2 , 1)linha 5 => (5 , 2 , 2)linha 6 => (6 , 2 , 3)linha 7 => (7 , 2 , 4)linha 8 => (8 , 3 , 1)linha 9 => (9 , 3 , 4)No caso da busca, queria que me retornasse apenas "golf" e "celta", pois todos tem os opcionais "1", "3" e "4".O "celta" tem o opcional "2" também, mas isso não importa.Como faco a busca?estou fazendoSELET a.cod,a.modelo FROM anuncios a, anuncios_opcionais oWHERE a.cod = o.cod_anuncioAND o.cod_opcional = 1AND o.cod_opcional = 3AND o.cod_opcional = 4Também ja tentei do seguinte modo:WHERE a.cod = o.cod_anuncioAND o.cod_opcional in (1, 2, 3)Esse me retorna: golf, celta, clioQuando na verdade, para o meu problema é necessario que ele me retorne apenas golf e celta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, beleza?

 

dá uma olhada nesta consulta:

 

SELECT modelo

FROM anuncios A

INNER JOIN anuncios_opcionais B ON B.cod_anuncio = A.cod

GROUP BY B.cod_anuncio

#Verfificar se houve pelo menos 1 registro dos opcionais informados, NULL para não incrementar

HAVING

COUNT(IF(B.cod_opcional= 1,1,NULL)) > 0 AND

COUNT(IF(B.cod_opcional= 3,1,NULL)) > 0 AND

COUNT(IF(B.cod_opcional= 4,1,NULL)) > 0 ORDER BY modelo

Qquer dúvida posta ae ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

até agora nada

 

a primeira solucao apresentada, retorna o mesmo do

WHERE a.cod = o.cod_anuncio

AND o.cod_opcional in (1, 2, 3)

 

e a segunda retornou 0

 

eu consegui fazer parcialmente........ usando cursores.......

 

SELECT a.cod,a.modelo FROM anuncios a, anuncios_opcionais o, anuncios_opcionais o2, anuncios_opcionais o3WHERE a.cod = o.cod_anuncio	  and a.cod = o2.cod_anuncio	  and a.cod = o3.cod_anuncio	  AND o.cod_opcional = 1	  AND o2.cod_opcional = 3	  AND o3.cod_opcional = 4

Mas ele soh esta me retornando os que tem opcionais 1, 3 e 4

 

é o oposto do problema que tenho com as solucoes ja apresentadas.

 

Entendam

 

Quero pesquisar um carro que tenha Ar condicionado e Direção Hidráulica..... do jeito que eu fiz, ele retorna APENAS OS QUEM TEM SOMENTE AR e DH

 

Se o carro tiver (AR, DH, Vidros Eletricos, Travas Eletricas) a consulta nao vai retorar esse carro... e vai retornar APENAS os que tem SOMENTE os itens que eu especificar, isso nao resolve me proublema... mas obrigado pela ajuda de voces...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se no caso são 1, 3 e 4.

 

A lista IN está errada.

 

O certo seria:

WHERE a.cod = o.cod_anuncio AND o.cod_opcional IN (1, 3, 4)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda nao consegui, o que chegou mais perto da minha solução foi o seguinte codigo:SELECT a.cod,a.modelo FROM anuncios a, anuncios_opcionais o, anuncios_opcionais o2, anuncios_opcionais o3WHERE a.cod = o.cod_anuncio and a.cod = o2.cod_anuncio and a.cod = o3.cod_anuncio AND o.cod_opcional = 1 AND o2.cod_opcional = 3 AND o3.cod_opcional = 4mas assim ele restringe a busca, apenas aos anuncios que tiverem opcionais 1, 2 e 4....Se o carro tiver opcionais: 1, 2, 3, 4, 5, 6, 7eu quero que ele apareca tambem na listagem....mas quero que mostre no minimo os que tenham 1, 3 e 4alguem ajuda ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae...

rapaz é o seguinte, até que consegui chegar ao resultado... mas... a função que utilizei pelo visto está disponível a partir da versão 4.1 do MySQL, que é o group_concat.

Criei as tabelas que você mencionou aqui para testes:

#Tabela de TesteCREATE TABLE `anuncios` (			   			`cod` int(5) NOT NULL default '0',				`modelo` varchar(10) default NULL,				`ano` int(4) default NULL,						`preco` double(13,2) default NULL,				PRIMARY KEY  (`cod`)				  		  ) ENGINE=MyISAM DEFAULT CHARSET=latin1

#Tabela de testeCREATE TABLE `anuncios_opcionais` (											  `cod` int(5) NOT NULL auto_increment,										  `cod_anuncio` int(5) default NULL,					   					  `cod_opcional` int(1) default NULL,					  					  PRIMARY KEY  (`cod`),														  UNIQUE KEY `cod_anuncio` (`cod_anuncio`,`cod_opcional`)  					) ENGINE=MyISAM DEFAULT CHARSET=latin1

#Tabela de testeCREATE TABLE `opcional` (			   			`cod` int(5) default NULL,						`desc` varchar(10) default NULL	   		  ) ENGINE=MyIsam DEFAULT CHARSET=latin1
com os registros:

anuncios

cod, modelo, ano, preco,

1, golf, NULL, NULL

2, celta, NULL, NULL

3, clio, NULL, NULL

anuncios_opcioais

cod, cod_anuncio, cod_opcional

1, 1, 1

2, 1, 3

3, 1, 4

4, 2, 1

5, 2, 2

6, 2, 3

7, 3, 1

8, 3, 4

9, 2, 4

opcionais

cod desc

1, AR

2, DH

3, VE

4, TE

E finalmente a query:

SELECT A.cod, A.modelo, GROUP_CONCAT(C.desc ORDER BY B.cod_opcional SEPARATOR ',') AS OPC

FROM anuncios A

INNER JOIN anuncios_opcionais B ON B.cod_anuncio = A.cod

INNER JOIN opcional C ON C.cod = B.cod_opcional

GROUP BY A.cod

HAVING

INSTR(OPC,'AR') > 0 AND

INSTR(OPC,'TE') > 0 AND

INSTR(OPC,'VE') > 0

Trouxe o resultado:

cod modelo OPC

1, golf, AR,VE,TE

2, celta, AR,DH,VE,TE

Tá meio "marretado", mas a princípio acho q dá p/ ter uma idéia, se for o caso melhorar esta consulta.

Se você estiver utilizando versão inferior a 4.1, diz ae que tentamos encontrar outra opção.

Qquer dúvida posta ae.

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

por acaso você ja tentou trocar seus AND por OR ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, VOCE É O CARA!Deu certo aqui, muito obrigado!Irei agora "juntar" essa consulta com outra que tenho, pq tenho que fazer isso dinamicamente, mas muito obrigado, deu certo aqui!

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT a.cod as cod, a.cod_anunciante as cod_anunciante, a.fabricante as fabricante, a.modelo as modelo, a.versao as versao, a.ano1 as ano1, a.ano2 as ano2, a.portas as portas, a.preco as preco, a.combustivel as combustivel, a.cor as cor, a.motor as motor, a.quilometragem as quilometragem, l.pasta_de_fotos as pasta_de_fotos, f.foto_reduzida as foto_reduzida, c.nome as cidade , GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPC FROM anuncios a, lojistas l, anuncios_fotos f, cidades cINNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.codINNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcional WHERE a.situacao = 'ativo' AND f.cod_anuncio = a.cod AND l.cod = a.cod_anunciante AND l.cod_cidade = c.cod GROUP BY a.cod HAVING INSTR(OPC,'1') > 0 AND INSTR(OPC,'2') > 0 AND INSTR(OPC,'3') > 0 ORDER BY c.cod, a.fabricante, a.modeloESSA CONSULTA FUNCIONAVA NORMALMENTE NO MYSQL 4.1, JÁ NO MYSQL 5.0 NAO ESTA FUNCIONANDO, O ERRO QUE APRESENTA É:MySQL said: #1054 - Unknown column 'a.cod' in 'on clause' ------------------------------------------------------------------------------------------------------------------------ESSA CONSULTA DE BAIXO, FUNCIONA NO MYSQL 5 , A DE CIMA (QUE FUNCIONA NO 4) TEM ALGUMAS RESTRICOES A MAIS, ERA PARA ESTAR FUNCIONANDO NO 5 TBM.ESSA DE BAIXO ESTÁ FUNCIONANDO NO 5.SELECT a.cod as cod, a.cod_anunciante as cod_anunciante, a.fabricante as fabricante, a.modelo as modelo, a.versao as versao, a.ano1 as ano1, a.ano2 as ano2, a.portas as portas, a.preco as preco, a.combustivel as combustivel, a.cor as cor, a.motor as motor, a.quilometragem as quilometragem, GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPCFROM anuncios a INNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.codINNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcionalGROUP BY a.codHAVING INSTR(OPC,'1') > 0 AND INSTR(OPC,'2') > 0 AND INSTR(OPC,'3') > 0ALGUEM ME AJUDA AI POR FAVOR

Compartilhar este post


Link para o post
Compartilhar em outros sites

é complicado... ^_^

Passei por esse problema também...

É o seguinte, não sei por que, mas agora quando utiliza-se um alias de uma tabela fora de um inner por exemplo, é retornado um erro informando que não foi encontrado, no seu caso.

Resumindo, utilizando tabelas separadas por vírgula e logo depois tentar utilizar em um inner umas destas tabelas (com alias)... dá pau.

O jeito é acertar a cláusula From. Exemplo:

SELECT

anuncios a,

lojistas l,

anuncios_fotos f,

cidades c

anuncios_opcionais o

auto_opcionais ao

WHERE

a.situacao = 'ativo' AND

f.cod_anuncio = a.cod AND

l.cod = a.cod_anunciante AND

l.cod_cidade = c.cod AND

o.cod_anuncio = a.cod AND

ao.cod = o.cod_opcional AND

#... restante da consulta ...

Deve resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo acertando o "FROM" está dando erro, voce poderia me passar seu MSN ?que eu te dou o login e senha do servidor, para você dar uma olhada, pois como migrei, metade de uma busca detalhada que tenho no meu site, está sem funcionar... já tentei de vários jeitos e não estou conseguindo. o meu msn é: alcirlima@hotmail.com Mensagens do MySQL : Documentação#1066 - Not unique table/alias: 'o' Essa consulta executa perfeitamente:

SELECT	a.cod as cod,	a.cod_anunciante as cod_anunciante,	a.fabricante as fabricante,	a.modelo as modelo,	a.versao as versao,	a.ano1 as ano1,	a.ano2 as ano2,	a.portas as portas,	a.preco as preco,	a.combustivel as combustivel,	a.cor as cor,	a.motor as motor,	a.quilometragem as quilometragem,	GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPCFROM	anuncios a	INNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.codINNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcionalGROUP BY	a.codHAVING	INSTR(OPC,'1') > 0 AND	INSTR(OPC,'2') > 0 AND	INSTR(OPC,'3') > 0

Agora quando acrescento o restante da consulta (que é o que desejo), ele fica dando esse erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este erro 'Not unique table/alias: ' informa que você informou duas tabelas com o mesmo alias.Faz uma revisão com calma p/ identificar quais ficaram com o mesmo alias.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT	a.cod as cod,	a.cod_anunciante as cod_anunciante,	a.fabricante as fabricante,	a.modelo as modelo,	a.versao as versao,	a.ano1 as ano1,	a.ano2 as ano2,	a.portas as portas,	a.preco as preco,	a.combustivel as combustivel,	a.cor as cor,	a.motor as motor,	a.quilometragem as quilometragem,	l.pasta_de_fotos as pasta_de_fotos,	f.foto_reduzida as foto_reduzida,	c.nome as cidade	, GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPC				FROM	anuncios a,	lojistas l,	anuncios_fotos f,	cidades c,	anuncios_opcionais o,	auto_opcionais ao	INNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.codINNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcional		WHERE	a.situacao = 'ativo' AND	f.cod_anuncio = a.cod AND	l.cod = a.cod_anunciante AND	l.cod_cidade = c.cod		GROUP BY	a.cod	HAVING	INSTR(OPC,'1') > 0 AND	INSTR(OPC,'2') > 0 AND	INSTR(OPC,'3') > 0			ORDER BY	c.cod,	a.fabricante,	a.modelo

Não seria esta a solucao que voce tinha dado?colocar todas as tabelas no "FROM" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora eu tirei todos os alias e coloquei os nomes das tabelas completas:ex:anuncios.codlojistas.code continua dando o erro#1054 - Unknown column 'anuncios.cod' in 'on clause'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então faz o seguinte:posta aqui a estrutura (create) das tabelas que você está utilizando para realizar a consulta e também a consulta inteira que está dando erro.Daí podemos criar estas tabelas no banco de dados e simular o problema, beleza?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estrutura Create:

 

# MySQL-Front Dump 2.3## Host: localhost   Database: autosto#--------------------------------------------------------# Server version 4.1.9-max## Table structure for table 'anuncios'#CREATE TABLE `anuncios` (  `cod` int(6) NOT NULL auto_increment,  `cod_anunciante` int(4) NOT NULL default '0',  `categoria` varchar(50) NOT NULL default '',  `fabricante` varchar(50) NOT NULL default '',  `modelo` varchar(50) NOT NULL default '',  `versao` varchar(30) default NULL,  `ano1` int(4) NOT NULL default '0',  `ano2` int(4) NOT NULL default '0',  `portas` int(1) NOT NULL default '0',  `preco` float NOT NULL default '0',  `combustivel` varchar(50) NOT NULL default '',  `cor` varchar(20) NOT NULL default '',  `motor` varchar(20) NOT NULL default '',  `quilometragem` varchar(10) NOT NULL default '',  `obs` text NOT NULL,  `situacao` varchar(7) NOT NULL default 'inativo',  `data` date NOT NULL default '0000-00-00',  `tipo` varchar(10) NOT NULL default '',  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'anuncios'#INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546547", "12", "CArros", "golf", "golf", "stacio", "1999", "1993", "5", "20", "gasola", "preto", "2.8", "150000", "", "ativo", "2006-05-05", "lojista");INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546548", "12", "tempra", "celta", "celta", "celta", "2000", "2000", "2", "203021", "gasola", "preto", "1.0", "120000", "", "ativo", "2006-05-08", "lojista");INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546549", "12", "clio", "clio", "clio", "clio", "2005", "2005", "2", "250000", "alcool", "branco", "3.8", "1200", "", "ativo", "2006-09-25", "lojista");INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546550", "12", "10", "15", "celta", "classic", "2008", "2008", "5", "29870", "gasolina", "vinho", "2.0", "65.200", "", "ativo", "2006-05-08", "particular");INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546551", "12", "teste", "tesat", "sdf", "321", "2006", "2006", "3", "23156", "dsad", "das", "dasd", "asdf", "", "ativo", "0000-00-00", "lojista");INSERT INTO anuncios (cod, cod_anunciante, categoria, fabricante, modelo, versao, ano1, ano2, portas, preco, combustivel, cor, motor, quilometragem, obs, situacao, data, tipo) VALUES("546552", "17", "Carros", "Renault", "Clio", "sedan", "2001", "2002", "4", "25600", "Gasolina", "Preto", "2.0", "25.000", "carro em estado de 0ok", "ativo", "2006-12-12", "lojista");## Table structure for table 'anuncios_fotos'#CREATE TABLE `anuncios_fotos` (  `cod` int(99) NOT NULL auto_increment,  `cod_anuncio` int(6) NOT NULL default '0',  `foto_reduzida` varchar(85) NOT NULL default '',  `foto_principal` varchar(85) NOT NULL default '',  `foto_2` varchar(85) default NULL,  `foto_3` varchar(85) default NULL,  `foto_4` varchar(85) default NULL,  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`,`cod_anuncio`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'anuncios_fotos'#INSERT INTO anuncios_fotos (cod, cod_anuncio, foto_reduzida, foto_principal, foto_2, foto_3, foto_4) VALUES("1", "95", "../foto_em_breve_peq.jpg", "../foto_em_breve.jpg", "sem_foto", "sem_foto", "sem_foto");INSERT INTO anuncios_fotos (cod, cod_anuncio, foto_reduzida, foto_principal, foto_2, foto_3, foto_4) VALUES("2", "96", "../foto_em_breve_peq.jpg", "../foto_em_breve.jpg", "sem_foto", "sem_foto", "sem_foto");INSERT INTO anuncios_fotos (cod, cod_anuncio, foto_reduzida, foto_principal, foto_2, foto_3, foto_4) VALUES("3", "546550", "d", "d", "d", "d", "d");INSERT INTO anuncios_fotos (cod, cod_anuncio, foto_reduzida, foto_principal, foto_2, foto_3, foto_4) VALUES("4", "546551", "ds", "d", "d", "d", "d");INSERT INTO anuncios_fotos (cod, cod_anuncio, foto_reduzida, foto_principal, foto_2, foto_3, foto_4) VALUES("5", "546552", "d", "d", "d", "d", "d");## Table structure for table 'anuncios_opcionais'#CREATE TABLE `anuncios_opcionais` (  `cod` int(99) NOT NULL auto_increment,  `cod_anuncio` int(4) NOT NULL default '0',  `cod_opcional` int(2) NOT NULL default '0',  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`,`cod_anuncio`,`cod_opcional`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'anuncios_opcionais'#INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("87", "546547", "1");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("88", "546547", "2");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("89", "546547", "4");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("90", "546548", "1");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("91", "546548", "2");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("92", "546548", "3");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("93", "546549", "3");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("94", "546549", "6");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("95", "546549", "2");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("96", "546547", "1");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("97", "546547", "2");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("98", "546552", "2");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("99", "546552", "3");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("100", "546552", "9");INSERT INTO anuncios_opcionais (cod, cod_anuncio, cod_opcional) VALUES("101", "546552", "12");## Table structure for table 'auto_opcionais'#CREATE TABLE `auto_opcionais` (  `cod` int(3) NOT NULL auto_increment,  `nome` varchar(30) NOT NULL default '',  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'auto_opcionais'#INSERT INTO auto_opcionais (cod, nome) VALUES("1", "Ar Condicionado");INSERT INTO auto_opcionais (cod, nome) VALUES("2", "Direção Hidráulica");INSERT INTO auto_opcionais (cod, nome) VALUES("3", "Vidros Elétricos");INSERT INTO auto_opcionais (cod, nome) VALUES("4", "Travas Elétricas");INSERT INTO auto_opcionais (cod, nome) VALUES("5", "Alarme");INSERT INTO auto_opcionais (cod, nome) VALUES("6", "Rodas de Liga Leve");INSERT INTO auto_opcionais (cod, nome) VALUES("7", "Bancos de Couro");INSERT INTO auto_opcionais (cod, nome) VALUES("8", "Air Bag");INSERT INTO auto_opcionais (cod, nome) VALUES("9", "Teto Solar");INSERT INTO auto_opcionais (cod, nome) VALUES("10", "Retrovisores Elétricos");INSERT INTO auto_opcionais (cod, nome) VALUES("11", "Cd Player");INSERT INTO auto_opcionais (cod, nome) VALUES("12", "Mp3 Player");INSERT INTO auto_opcionais (cod, nome) VALUES("13", "Farol de Milha");INSERT INTO auto_opcionais (cod, nome) VALUES("14", "Câmbio Automático");INSERT INTO auto_opcionais (cod, nome) VALUES("15", "Bancos Elétricos");INSERT INTO auto_opcionais (cod, nome) VALUES("16", "Ajuste de Direção");INSERT INTO auto_opcionais (cod, nome) VALUES("17", "Computador de Bordo");INSERT INTO auto_opcionais (cod, nome) VALUES("18", "Freios ABS");INSERT INTO auto_opcionais (cod, nome) VALUES("19", "Trava Central");INSERT INTO auto_opcionais (cod, nome) VALUES("20", "Vidros Verdes");INSERT INTO auto_opcionais (cod, nome) VALUES("21", "Desembaçador Traseiro");INSERT INTO auto_opcionais (cod, nome) VALUES("22", "Ar Quente");INSERT INTO auto_opcionais (cod, nome) VALUES("23", "Rádio Toca Fitas");INSERT INTO auto_opcionais (cod, nome) VALUES("24", "Blindado");INSERT INTO auto_opcionais (cod, nome) VALUES("25", "Tração 4x4");INSERT INTO auto_opcionais (cod, nome) VALUES("26", "Limpador Traseiro");INSERT INTO auto_opcionais (cod, nome) VALUES("27", "Conta Giros");INSERT INTO auto_opcionais (cod, nome) VALUES("28", "Insulfilm");INSERT INTO auto_opcionais (cod, nome) VALUES("29", "Outros");INSERT INTO auto_opcionais (cod, nome) VALUES("30", "CARRO SEM OPCIONAIS");## Table structure for table 'cidades'#CREATE TABLE `cidades` (  `cod` int(2) NOT NULL auto_increment,  `nome` varchar(50) NOT NULL default '',  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'cidades'#INSERT INTO cidades (cod, nome) VALUES("2", "Palmas-TO");## Table structure for table 'lojistas'#CREATE TABLE `lojistas` (  `cod` int(3) NOT NULL auto_increment,  `cod_cidade` int(2) default NULL,  `nome` varchar(250) NOT NULL default '',  `end_rua` varchar(250) NOT NULL default '',  `end_no` varchar(10) NOT NULL default '',  `end_bairro` varchar(100) NOT NULL default '',  `telefone` varchar(9) NOT NULL default '',  `fax` varchar(9) NOT NULL default '',  `contato1_nome` varchar(100) NOT NULL default '',  `contato1_fone` varchar(9) NOT NULL default '',  `contato2_nome` varchar(100) NOT NULL default '',  `contato2_fone` varchar(9) NOT NULL default '',  `contato3_nome` varchar(100) NOT NULL default '',  `contato3_fone` varchar(9) NOT NULL default '',  `email` varchar(250) NOT NULL default '',  `senha` varchar(12) NOT NULL default '',  `nivel` int(10) unsigned NOT NULL default '1',  `pasta_de_fotos` varchar(100) NOT NULL default '',  `tipo` varchar(10) NOT NULL default '',  `plano` int(3) NOT NULL default '0',  PRIMARY KEY  (`cod`),  KEY `cod` (`cod`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;## Dumping data for table 'lojistas'#INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("2", "2", "testando", "sdasdasdasdasdasdasd", "no", "bairro", "telefone", "fax", "nome do contato 1", "tel", "nome do contato 2", "tel", "nome contato 3", "tel", "a@a.a", "a", "1", "teste", "lojista", "0");INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("13", "0", "testando", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "lojista", "0");INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("14", "0", "testando", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "lojista", "0");INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("15", "0", "testando", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "lojista", "0");INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("16", "0", "testando", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "lojista", "0");INSERT INTO lojistas (cod, cod_cidade, nome, end_rua, end_no, end_bairro, telefone, fax, contato1_nome, contato1_fone, contato2_nome, contato2_fone, contato3_nome, contato3_fone, email, senha, nivel, pasta_de_fotos, tipo, plano) VALUES("17", "2", "dfsaf", "fsdf", "$3", "bbbbbbbb", "ff", "fff", "f", "fff", "ffff", "fff", "fff", "$fff", "email@email.com", "fff", "1", "pasta", "lojista", "20");

Busca que funcionava no MySQL 4, e não está funcionando mais no MySQL 5


 

 

FROM

anuncios a,

lojistas l,

anuncios_fotos f,

cidades c

 

INNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.cod

INNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcional

 

WHERE

a.situacao = 'ativo' AND

f.cod_anuncio = a.cod AND

l.cod = a.cod_anunciante AND

l.cod_cidade = c.cod

 

GROUP BY

a.cod

 

HAVING

INSTR(OPC,'1') > 0 AND

INSTR(OPC,'2') > 0 AND

INSTR(OPC,'3') > 0

 

ORDER BY

c.cod,

a.fabricante,

a.modelo linenums:0'>SELECT a.cod as cod, a.cod_anunciante as cod_anunciante, a.fabricante as fabricante, a.modelo as modelo, a.versao as versao, a.ano1 as ano1, a.ano2 as ano2, a.portas as portas, a.preco as preco, a.combustivel as combustivel, a.cor as cor, a.motor as motor, a.quilometragem as quilometragem, l.pasta_de_fotos as pasta_de_fotos, f.foto_reduzida as foto_reduzida, c.nome as cidade , GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPC FROM anuncios a, lojistas l, anuncios_fotos f, cidades cINNER JOIN anuncios_opcionais o ON o.cod_anuncio = a.codINNER JOIN auto_opcionais ao ON ao.cod = o.cod_opcional WHERE a.situacao = 'ativo' AND f.cod_anuncio = a.cod AND l.cod = a.cod_anunciante AND l.cod_cidade = c.cod GROUP BY a.cod HAVING INSTR(OPC,'1') > 0 AND INSTR(OPC,'2') > 0 AND INSTR(OPC,'3') > 0 ORDER BY c.cod, a.fabricante, a.modelo

Está ai, não precisa retornar nada, pois está sem todos os dados, apenas a consulta validade é o que importa, pois os dados corretos estao em outra base de dados, mas as tabelas são as mesmas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta ficou assim:

SELECT

a.cod as cod,

a.cod_anunciante as cod_anunciante,

a.fabricante as fabricante,

a.modelo as modelo,

a.versao as versao,

a.ano1 as ano1,

a.ano2 as ano2,

a.portas as portas,

a.preco as preco,

a.combustivel as combustivel,

a.cor as cor,

a.motor as motor,

a.quilometragem as quilometragem,

l.pasta_de_fotos as pasta_de_fotos,

f.foto_reduzida as foto_reduzida,

c.nome as cidade

, GROUP_CONCAT(ao.cod ORDER BY o.cod_opcional SEPARATOR ',') AS OPC

 

 

FROM

anuncios a,

lojistas l,

anuncios_fotos f,

cidades c,

anuncios_opcionais o,

auto_opcionais ao

 

WHERE

a.situacao = 'ativo' AND

f.cod_anuncio = a.cod AND

l.cod = a.cod_anunciante AND

l.cod_cidade = c.cod AND

o.cod_anuncio = a.cod AND

ao.cod = o.cod_opcional

 

GROUP BY

a.cod

 

HAVING

INSTR(OPC,'1') > 0 AND

INSTR(OPC,'2') > 0 AND

INSTR(OPC,'3') > 0

 

ORDER BY

c.cod,

a.fabricante,

a.modelo

Fiz teste na versão 5.0.26 e retornou isso:

cod;cod_anunciante;fabricante;modelo;versao;ano1;ano2;portas;preco;combustivel;c

or;motor;quilometragem;pasta_de_fotos;foto_reduzida;cidade;OPC

546552;17;Renault;Clio;sedan;2001;2002;4;25600;Gasolina;Preto;2.0;25.000;pasta;d

;Palmas-TO;2,3,9,12

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado, olha ai funcionando tudo direitinho:

 

http://www.autosimples.com.br/pe/buscar/avancada/

 

Me passa o nº de sua conta ai que eu deposito uma grana pra voce :)

 

Se precisar de qualquer ajuda em PHP ou CSS ou qualquer coisa que eu possa te ajudar, é só me contactar.

 

OBRIGADO MESMO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me passa o nº de sua conta ai que eu deposito uma grana pra voce

ehehehebeleza cara http://forum.imasters.com.br/public/style_emoticons/default/devil.gif zuera, estamos ae p/ ajudar a galera sempre que puder-mos.... (pera ae q vou pegar o nº http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif )qquer coisa estamos ae http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigao, mande mesmo o nº da conta que eu deposito!Só tem mais um probleminha, a consulta está dando certo, mas está acontecendo o seguinte.Carro 1: AR, DH, VE, TECarro 2: AR, DHCarro 3: AR, TESe eu pesquisar os carros com AR e DH ele vai listar todos os 3 carros. E não era isso que era para acontecer, era para ele listar apenas o "Carro 1" e "Carro 2", pois esses carros tem AR e DH que satisfazem o que o cliente está buscando.Ele tem que ter no mínimo o que o cliente definir na busca

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.