stview 0 Denunciar post Postado Novembro 17, 2005 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
Wilton 0 Denunciar post Postado Novembro 17, 2005 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 nomeAqui 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
stview 0 Denunciar post Postado Novembro 17, 2005 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
Wilton 0 Denunciar post Postado Novembro 17, 2005 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
NaPraia 12 Denunciar post Postado Novembro 17, 2005 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
stview 0 Denunciar post Postado Novembro 17, 2005 AAAAAAAAAAAAAAAAAAAAAAAAALembrei .. faltou um GROUP BYValeus Compartilhar este post Link para o post Compartilhar em outros sites