Jump to content


Photo

Inner Join Selecionando Errado


  • Faça o login para participar
4 replies to this topic

#1 thioz21

thioz21

    Normal

  • Usuários
  • 116 posts
  • Sexo:Masculino
  • Localidade:Passos

Posted 29/06/2012, 16:05

Olá galera, o meu INNER JOIN está correto até uma certa parte, ele não ta pegando os resultados direito, o que será que está errado? ele está trocando a imagem de lugar por exemplo:

ERRADO:
id_produto(5) = id_foto(6)

CERTO:
id_produto(5) = id_foto(5)

na hora de exibir a foto ele troca as bolas com o id_produto

SELECT produto.id_produto, produto.nome_produto, produto_foto.foto FROM produto INNER JOIN produto_foto ON produto.id_produto = produto_foto.id_foto

Edição feita por: thioz21, 29/06/2012, 16:09.


#2 Allex Severino

Allex Severino

    Será?!?!?!

  • Usuários
  • 793 posts
  • Sexo:Masculino
  • Localidade:São Luís de Montes Belos - GO

Posted 29/06/2012, 16:45

Acredito que o problema esteja aqui:

ON produto.id_produto = produto_foto.id_foto

Na tabela produto_foto tem que ter um campo cadastrando o mesmo id da tabela produto, relacionando assim as duas tabelas. Teria que ter um campo id_produto, as tabelas ficariam assim:

produto
id
nome

produto_foto
id
id_produto
foto

E a condição seria assim:

ON produto.id_produto = produto_foto.id_produto

Meu post lhe ajudou? Clicar no Posted Image é uma das formas de agradecer.

#3 thioz21

thioz21

    Normal

  • Usuários
  • 116 posts
  • Sexo:Masculino
  • Localidade:Passos

Posted 30/06/2012, 06:43

deu certo, mas olha como ele ta retornando

Posted Image

eu queria apenas 1 registro de cada ID_PRODUTO, mas ele ta mostrando 2 registro de cada.

o sql está certo

produto
CREATE TABLE `produto` (
  `id_produto` int(11) NOT NULL AUTO_INCREMENT,
  `nome_produto` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `descricao_produto` text COLLATE latin1_general_ci,
  `id_produto_categoria` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_produto`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


produto_foto
CREATE TABLE `produto_foto` (
  `id_foto` int(11) NOT NULL AUTO_INCREMENT,
  `id_produto` int(11) DEFAULT NULL,
  `foto` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  PRIMARY KEY (`id_foto`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Edição feita por: thioz21, 30/06/2012, 06:46.


#4 Allex Severino

Allex Severino

    Será?!?!?!

  • Usuários
  • 793 posts
  • Sexo:Masculino
  • Localidade:São Luís de Montes Belos - GO

Posted 30/06/2012, 06:55

Se tiver mais de um item cadastrado no banco, você terá que colocar:

ORDER BY produto.id_produto DESC LIMIT 1

Ordenei por ordem descrescente, você pode colocar ASC para crescente.
Meu post lhe ajudou? Clicar no Posted Image é uma das formas de agradecer.

#5 thioz21

thioz21

    Normal

  • Usuários
  • 116 posts
  • Sexo:Masculino
  • Localidade:Passos

Posted 30/06/2012, 17:18

Olá @Allex, fiz de um jeito aqui que funcionou

aqui a solução

SELECT produto.id_produto,produto.nome_produto, max(produto_foto.foto) as foto
FROM produto INNER JOIN produto_foto ON (produto.id_produto = produto_foto.id_produto)
GROUP BY produto.id_produto, produto.nome_produto ORDER BY RAND()


Obrigado

Edição feita por: thioz21, 30/06/2012, 17:19.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq