regina 0 Denunciar post Postado Dezembro 3, 2008 Olá! Eu tenho duas tabelas relacionadas: tabela pai CREATE TABLE IF NOT EXISTS `tb_galerias` ( `galeria_id` int(6) NOT NULL auto_increment, `galeria` varchar(55) NOT NULL, `descricao` text NOT NULL, `exibir` enum('sim','nao') NOT NULL default 'sim', `criacao_data` datetime NOT NULL default '0000-00-00 00:00:00', `criacao_ope` int(2) NOT NULL default '0', `edicao_data` datetime default NULL, `edicao_ope` int(2) default NULL, PRIMARY KEY (`galeria_id`), UNIQUE KEY `categoria_2` (`galeria`), KEY `categoria` (`galeria`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Galeria de Imagens - Tabela: Categorias';tabela filha CREATE TABLE IF NOT EXISTS `tb_galeria_img` ( `imagem_id` int(10) NOT NULL auto_increment, `galeria_id` int(6) NOT NULL, `imagem` varchar(100) NOT NULL, `legenda` varchar(100) default NULL, `exibir` enum('sim','nao') NOT NULL, `criacao_data` datetime NOT NULL default '0000-00-00 00:00:00', `criacao_ope` int(2) NOT NULL default '0', `edicao_data` datetime NOT NULL default '0000-00-00 00:00:00', `edicao_ope` int(2) NOT NULL default '0', PRIMARY KEY (`imagem_id`,`galeria_id`), KEY `id_categoria` (`galeria_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Galerias de Imagens - Tabela: Imagens'; ALTER TABLE `tb_galeria_img` ADD CONSTRAINT `galeria_id` FOREIGN KEY (`galeria_id`) REFERENCES `tb_galerias` (`galeria_id`) ON DELETE CASCADE; Preciso realizar uma consulta chamando os dados de ambas, como faço? Tentei assim e não trouxe os valores da tabela tb_galerias # $sql = mysql_query("SELECT * FROM tb_galeria_img INNER JOIN tb_galerias ON(tb_galerias.galeria_id = tb_galeria_img.galeria_id) WHERE tb_galerias.exibir='sim' ORDER BY tb_galeria_img.galeria_id DESC LIMIT 3") or die (mysql_error()); Desde já agradeço Compartilhar este post Link para o post Compartilhar em outros sites
LHAlmeida 0 Denunciar post Postado Dezembro 4, 2008 Verifique se na tabela filha você possui imagens para a tabela mae... como você fez uma INNER JOIN ela obriga que haja alguma linha relacionada a tabela que você chamou de tabela pai. deu erro na sua query ou retornou um conjunto vazio? se retornou um conjunto vazio, troca o INEER JOIN por LEFT JOIN que irá trazer resultados mesmo que não exista linhas relacionadas a sua tabela pai. espero ter ajudado... abraço Lucas Compartilhar este post Link para o post Compartilhar em outros sites
regina 0 Denunciar post Postado Dezembro 8, 2008 ele traz resultado sim, porém não traz os valores da tabela galeria somente da filha galeria_img as imagens ele traz normalmente... sim na tabela filha tem os respectivos ids das galerias a que cada imagem pertence e está corretinho, verifiquei isso também. De qualquer forma obrigada pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
LHAlmeida 0 Denunciar post Postado Dezembro 9, 2008 ele traz resultado sim, porém não traz os valores da tabela galeria somente da filha galeria_img regina, notei que os nomes das suas colunas (na grande maioria) são iguais nas duas tabelas eu acredito que está retornando dados da tabela pai sim, o problema deve estar nos nomes repetidos, para testar se realmente retorna algum dado da tabela pai teste o seguinte $sql = mysql_query("SELECT tb_galerias.galeria FROM tb_galeria_img INNER JOIN tb_galerias ON(tb_galerias.galeria_id = tb_galeria_img.galeria_id) WHERE tb_galerias.exibir='sim' ORDER BY tb_galeria_img.galeria_id DESC LIMIT 3") or die (mysql_error()); troquei o * (todas as colunas de todas as tabelas da query) por apenas a coluna tb_galerias.galeria rode esse teste e verifique se retornam os nomes das galerias, se retornar, é porque os nomes das colunas estão repetidos e isso provavelmente nao deve ser bom, como isso nunca me ocorreu antes (ter campos em tabelas diferentes com mesmo nome), não sei exatamente o que ocorre, mas aparentemente é isto. Se retornar os dados, melhore sua query adicionando apenas as colunas que irá utilizar, caso precise de campos de tabelas diferentes que tenham nomes repetidos, crie um alias(apelidos) para cada um dos repetidos, assim você irá apelidálos somente no retorno para que não se repitam. exemplo: tb_galerias.edicao_ope, tb_galeria_img.edicao_ope as img_edicao_ope fazendo assim, o primeiro estará acessivel no php como "edicao_ope" e o segundo estará disponível em "img_edicao_ope" boa sorte Lucas Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Dezembro 11, 2008 nao tem problemas repetir nomes desde que explicite de qual tabela busca os dados Compartilhar este post Link para o post Compartilhar em outros sites