Ir para conteúdo

POWERED BY:

Arquivado

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

Angelito M. Goulart

Join com 4 tabelas mysql

Recommended Posts

Bom dia pessoal.

 

To com o seguinte problema:

 

Tenho 4 tabelas no banco de dados:

 

1 - > pedidos -> informacoes dos pedidos

2 - > pedido_produtos -> contem o id do pedido e o id do produto que tem do pedido

3 - > vendedores -> contem o nome dos vendedores

4 - > produtos -> contem o nome dos produtos

 

Quero fazer o seguinte:

 

A partir do Id do pedido, consulto na tabela pedido_produtos o id do pedido e vejo quais produtos estao cadastrados naquele pedido. Nisso, pego o id do produto que consta nessa tabela e pesquiso pelo id na tabela produtos para saber qual o nome do produto. Apos isso, pego o id do vendedor da tabela pedidos e consulto o nome dele na tabela vendedores.

 

digamos que mais ou menos assim

 

pedidos -> pego o id do pedido -> pedido_produtos -> vejo se tem produtos cadastrados, se sim, pego o id dos produtos -> produtos -> consulto o id dos produtos e pego seus respectivos nomes. apos isso, volto na tabela pedidos, pego o id do vendedor e consulto na tabela vendedores pelo id dele.

 

Ja consegui fazer o select dos produtos, o que esta faltando é a parte dos vendedores, pois nao queria fazer duas consultas.

 

Segue minha sql:

 

select produtos.nome, pedidos.* FROM pedidos INNER JOIN pedido_produtos ON pedidos.id = pedido_produtos.id_pedido INNER JOIN produtos ON pedido_produtos.id_produto = produtos.id

 

Desde ja agradeço,

 

até logo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem o objetivo, mas você quer que na consulta já retorne todos os dados, por exemplo:

 

Pedido1 | Camisa Nike | Vendedor Gustavo

Pedido1 | Camisa Adidas | Vendedor Gustavo

Pedido1 | Camisa Puma | Vendedor Gustavo

 

Seria isso, uma única query?

 

Numa única query você consegue retornar isso, apesar de eu achar que o ideal seria uma primeira consulta com pedido+vendedor e a partir disso outra com pedido_produto+produto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então creio que seria algo + ou - (altere o nome dos campos)

 

select * 
FROM 
pedidos,
vendedores,
pedido_produtos,
produtos
WHERE
pedidos.id_pedido = 10 AND
pedidos.id_pedido = pedidos_produtos.id_pedido AND
pedidos_produtos.id_produto = produtos.id_produto AND
pedidos.id_vendedor = vendedores.id_vendedor

 

Ele irá retornar tudo, retire o * e coloque os campso que precisar somente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajudo. Funcionou, tudo certinho, o problema é que nem sempre existe um vendedor para o produto e quando nao existe, o id do vendedor passa a ser 0. Teria como fazer esse select independente do campo vendedor for 0 ou nao?

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajudo. Funcionou, tudo certinho, o problema é que nem sempre existe um vendedor para o produto e quando nao existe, o id do vendedor passa a ser 0. Teria como fazer esse select independente do campo vendedor for 0 ou nao?

 

obrigado.

 

Sim, basta você fazer um left join somente para os vendedores, exemplo:

 

select * 
FROM 
pedidos_produtos,
produtos,
pedidos LEFT JOIN vendedores ON (pedidos.id_vendedor = vendedores.id_vendedor)
WHERE
pedidos.id_pedido = 10 AND
pedidos.id_pedido = pedidos_produtos.id_pedido AND
pedidos_produtos.id_produto = produtos.id_produto

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.