Ir para conteúdo

Arquivado

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

stview

Busca em 2 tabelas

Recommended Posts

Eu já fiz isso varias vezes, mas não estou conseguindo agora ...

 

Tenho duas tabelas, segue abaixo o codigo pra quem quiser testar:

CREATE TABLE t1 (  idm tinyint(3) unsigned NOT NULL auto_increment,  online tinyint(1) unsigned default 0,  nome varchar(160) default NULL,  PRIMARY KEY  (idm)) TYPE=InnoDB;CREATE TABLE t2 (  id tinyint(4) unsigned NOT NULL auto_increment,  online tinyint(1) unsigned default 0,  idm tinyint(3) unsigned NOT NULL default '1',  nome varchar(200) default NULL,  PRIMARY KEY  (id),  KEY marca (idm),  FOREIGN KEY (idm) REFERENCES t1 (idm) ON DELETE CASCADE) TYPE=InnoDB;INSERT INTO t1 VALUES("1", "1", "Marca 1");INSERT INTO t1 VALUES("2", "1", "Marca 2");INSERT INTO t1 VALUES("3", "1", "Marca 3");INSERT INTO t2 VALUES("1", "1", "1", "Produto 1");INSERT INTO t2 VALUES("2", "1", "3", "Produto 2");INSERT INTO t2 VALUES("3", "1", "3", "Produto 3");

t1 são marcas e t2 são produtos.

Eu quero listar as marcas que tem online=1 e que contenham produtos cadastrados com online=1 tb.

 

Já tentei usa join, where .. não consigo ... esta multiplicando ...

Vou postar o mais simples:

$sql = "SELECT m.* FROM t1 m, t2 i WHERE m.online='1' AND i.online='1' AND m.idm=i.idmORDER BY nome";

 

Deveria me mostrar 2 resgistro, mas ele esta mostrando 3, 2 da marca 1 e 1 da marca 2 ...

 

Como resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que isso! Não vai desistir não!

 

Deixa eu ver se entendi: Você quer listar as Marcas (t1) que tem online=1. Certo?

 

* Pelo que vi as três marcas estão com online=1.

 

Voce quer tb que liste só se os produtos da marca também tiverem online=1. Certo?

 

* Pelo que vi todos os três produtos também estão com online=1 e tem das marcas 1 e 3.

 

SELECT * FROM t1 WHERE online="1" AND EXISTS (SELECT * FROM t2 WHERE t1.idm=t2.idm AND online="1") ORDER BY nome
Aqui retornou a Marca 1 e a Marca 3.

 

Boa sorte!

 

OBS: Se der certo, fala aqui pra gente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas retornou marca 1, marca 1 e marca 3.Resultou 3 registros, e deveria ser apenas 2, pq eu to listando as marcas, não os produtos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, posta aqui o SELECT que você esta executando pq no meu teste aqui, fazendo as duas tabelas com a estrutura e os dados exatamente como você passou, da certinho.Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:SELECT distinct(nome) FROM t1 WHERE online="1" AND EXISTS (SELECT * FROM t2 WHERE t1.idm=t2.idm AND online="1") group by nomeORDER BY nome

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.