Ir para conteúdo
Fórum Script Brasil
  • 0

Select em duas tabelas, como fazer?


Andreia Regina

Pergunta

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','não') 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','não') 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

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'Andreia Regina'

Seu select está invertido. Você está buscando dados na tabela filha e depois na tabela pai. Normalmente isto não causa erro pois com INNER JOIN só serão retornadas as linhas que existirem em ambas as tabelas.

Experimente desta forma:

SELECT * FROM tb_galerias g 
INNER JOIN tb_galeria_img gimg ON gimg.galeria_id = g.galeria_id
WHERE g.exibir = 'sim' 
ORDER BY gimg.galeria_id DESC LIMIT 3

Se não funcionar é porque não há dados na tabela tb_galeria_img que se correlacionem com tb_galeria para a condição g.exibir = 'sim'.

Para testar troque INNER JOIN por LEFT JOIN

Ver manual do MySQL versão 4.1 (Tradução em português) para maiores informações.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...