Ir para conteúdo

POWERED BY:

Arquivado

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

Willian Aquino

[Resolvido] Consulta tem resultados repetidos Inner Join

Recommended Posts

Bom dia,

 

Pessoal estou com um problema de minha consulta no mysql + PHP, já olhei bem o forum e vi que tem várias pessoas com o mesmo problema mas mesmo assim não consegui resolver o meu caso, é mais por falta de conhecimento mesmo que eu não consigo mas acho que estou muito perto, só falta alguma coisa para dar certo.

 

Bom eu tenho a famoso relacionamento de N para N onde tenho uma tabala intermediária.

Tenho a Tabela fornecedo com os campos id_fornecedor,nome e etc

Tenho a Tabela Produto onde tenho o id_produto, nome etc

e a Tabela fornecedor_produto onde tenho os dois ID id_fornecedor e id_produto.

 

Na minha consulta tenho que trazer os produtos que o fornecedor possui e acabo trazendo produtos repetidos, o que não pode acontecer, eu tentei isso

 


SELECT a.id_produto, a.id_fornecedor, a.nome, a.tamanho, a.cor, a.quantidade_total, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a
INNER JOIN fornecedor_produto b ON a.id_fornecedor = $id_fornecedor
AND b.id_fornecedor = $id_fornecedor

 

onde me trar o seguinte resultado

 



id_produto | id_fornecedor | nome   | tamanho |	cor   |	quantidade_total | preco |  data      |  id_fornecedor | id_produto | quantidade
    2 		  2 	     Prego      12x34 	prata 		76 	  0.99     2011-02-26 	      2 	    2 		  76
    4 		  2 	     Roda 	12x12 	preto 	   	11 	  30.99    2011-03-07 	      2 	    2 		  76
    2 		  2 	     Prego 	12x34 	prata 	   	76 	  0.99 	   2011-02-26 	      2 	    4 		  11
    4 		  2 	     Roda 	12x12 	preto 	   	11 	  30.99    2011-03-07 	      2 	    4 		  11

 

 

Já tentei usar DISTINCT mas não funciona

 


SELECT DISTINCT (a.id_produto), a.id_fornecedor, a.nome, a.tamanho, a.cor, a.quantidade_total, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a
INNER JOIN fornecedor_produto b ON a.id_fornecedor = $id_fornecedor
AND b.id_fornecedor = $id_fornecedor

 

Mas me traz o mesmo resultado

 

Usei também i LEFT JOIN mas não funciona também.

 

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que falte o id_produto no join e isto está genrando um produto cartesiano indevido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Motta,

Primeiramente muito obrigado.

 

Mas eu fiz isso, não sei se isso mesmo, porque não entendi direito o que você quiz dizer


SELECT a.id_produto, a.id_fornecedor, a.nome, a.tamanho, a.cor, a.quantidade_total, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a
INNER JOIN fornecedor_produto b ON a.id_fornecedor = $id_fornecedor
AND b.id_fornecedor_PF = $id_fornecedor
AND a.id_produto =$id_produto

 

Me corrija se eu estiver errado.

 

Se eu falar que traga o id_produto eu estou selecionando não todos os produtos mas um único produto.

 

Mas com o resultado da consulta eu pode perceber que na tabela fornecedor_produto obtive os seguinte resultado.

 

 

 


id_produto   id_fornecedor   nome    tamanho 	cor 	quantidade_total   preco    data 	 id_fornecedor   id_produto  quantidade
2 		  2 	     Prego    12x34 	prata 		76 	   0.99     2011-02-26 		2 		2 	76
2 		  2 	     Prego    12x34 	prata 		76 	   0.99     2011-02-26 		2 		4 	11

 

 

Com esse resultado repetiu o produto 2 mas na tabela fornecedor_produto já trou-se os id_produto certinho os dois que eu tenho mesmo na tabela.

 

Com esse resultado eu posso tratar aqui no PHP e só mostrar o resultado da tabala fornecedor_produto?

Ou não tem que trazer somente um o id_produto da tabela produtos e 2 da tabela fornecedor_produtos?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Motta,

Primeiramente muito obrigado.

 

Mas eu fiz isso, não sei se isso mesmo, porque não entendi direito o que você quiz dizer


SELECT a.id_produto, a.id_fornecedor, a.nome, a.tamanho, a.cor, a.quantidade_total, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a
INNER JOIN fornecedor_produto b ON a.id_fornecedor = $id_fornecedor
AND b.id_fornecedor_PF = $id_fornecedor
AND a.id_produto =$id_produto

 

Me corrija se eu estiver errado.

 

Se eu falar que traga o id_produto eu estou selecionando não todos os produtos mas um único produto.

 

Mas com o resultado da consulta eu pode perceber que na tabela fornecedor_produto obtive os seguinte resultado.

 

 

 


id_produto   id_fornecedor   nome    tamanho 	cor 	quantidade_total   preco    data 	 id_fornecedor   id_produto  quantidade
2 		  2 	     Prego    12x34 	prata 		76 	   0.99     2011-02-26 		2 		2 	76
2 		  2 	     Prego    12x34 	prata 		76 	   0.99     2011-02-26 		2 		4 	11

 

 

Com esse resultado repetiu o produto 2 mas na tabela fornecedor_produto já trou-se os id_produto certinho os dois que eu tenho mesmo na tabela.

 

Com esse resultado eu posso tratar aqui no PHP e só mostrar o resultado da tabala fornecedor_produto?

Ou não tem que trazer somente um o id_produto da tabela produtos e 2 da tabela fornecedor_produtos?

 

Obrigado!

 

 

Pessoal estou quase lá. No final da consulta coloquei o GROUP BY e não repetiu mais o id_produto

 

 


SELECT a.nome, a.tamanho, a.cor, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a INNER JOIN fornecedor_produto b ON a.id_fornecedor = $select_fornecedor
AND b.id_fornecedor = $select_fornecedor
GROUP BY b.id_produto

 

Mas agora o nome do produto esta vindo igual, será o as minhas tabelas estão erradas?

Vou ter que fazer novamente o banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente :

 

SELECT a.nome, a.tamanho, a.cor, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a INNER JOIN fornecedor_produto b ON (b.id_fornecedor = a.id_fornecedor and
                                                   b.id_produto = a.id_produto)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente :

 

SELECT a.nome, a.tamanho, a.cor, a.preco, a.data, b.id_fornecedor, b.id_produto, b.quantidade
FROM produtos a INNER JOIN fornecedor_produto b ON (b.id_fornecedor = a.id_fornecedor and
                                                   b.id_produto = a.id_produto)

 

 

 

 

Motta,

 

Meu muito obrigado mesmo, deu certinho, eu tinha feito algo parecido mas não trouxe o valor correto, mas agora entendi o que você fez.

 

Valeu fica com Deus, Abraços!

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.