Ir para conteúdo

POWERED BY:

Arquivado

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

LHR

Mais de um JOIN com mesma tabela

Recommended Posts

Pessoal, estou tendo o seguinte problema para conseguir fazer esse JOIN no MySQL.eu possuo 1 tabela com alguns campos, tais como: emitente, cliente, data, produto1, produto2, produto3, obs...mas nos campos Cliente, Produto1, Produto2...eles são apenas os codigos que estão em outra tabela...assim:Emitente: LeonardoCliente: 12Data: 11/01/07Produto1: 09Produto2: 02Produto3: 17entao eu precisava pegar o nome desses produtos que ficam na tabela Aparelhos.entao eu tentei usar esse JOIN que ficou:select usuario.nome, pedido.emitente, pedido.data_emissao, pedido.hora, aparelho.nome FROM pedido left join usuario on (usuario.id=pedido.cliente) left join aparelho on (aparelho.id=pedido.produto1)mas eu nao consigo colocar tambem os campos: produto2 e produto3 que ficam na mesma tabela. Tentei usar AND, OR e talz, mas nao funciona legal...oq eu tenho de por depois do: (aparelho.id=pedido.produto1), para por os outros tambem?obrigado desde jaabraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode tentar umas destas duas formas tbm:

SELECT *FROM pedido ALEFT JOIN produto B ON ((A.PRODUTO1 = B.ID OR A.PRODUTO2 = B.ID OR A.PRODUTO3 = B.ID))

Retorna cada produto em uma linha.

SELECT A.*, P1.NOME, P2.NOME, P3.NOMEFROM pedido ALEFT JOIN produto P1 ON A.PRODUTO1 = P1.IDLEFT JOIN produto P2 ON A.PRODUTO2 = P2.IDLEFT JOIN produto P3 ON A.PRODUTO3 = P3.ID

Retorna todos os produtos em uma linha, diferenciados pelos campos.O nome das tabelas que utilizei são de exemplo apenas.Qquer prob. fala ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

afffffffffffffvelho...eu te amooooooooooputzzz...tentei esse seu segundo metodo e adicionei uma outra tabela e aparentemente esta funcionando tudo OK...fico assim ó:SELECT usuario.nome, pedido.emitente, P1.NOME, P2.NOME, P3.NOMEFROM pedidoLEFT JOIN aparelho P1 ON pedido.PRODUTO1 = P1.IDLEFT JOIN aparelho P2 ON pedido.PRODUTO2 = P2.IDLEFT JOIN aparelho P3 ON pedido.PRODUTO3 = P3.IDLEFT JOIN usuario on usuario.id=pedido.clienteeu nunca q ia fazer isso O_Otem como tu explicar isso pra mim??? pq eu nao entendi nadinhaaaa disso ahuahuhauahuahuuhavlwzão velho xDabraço, té mais ; )

Compartilhar este post


Link para o post
Compartilhar em outros sites

ixi...velho, agora o problema é no PHP...no MySQL ta funcionando certinho mesmo, mas como q faço agora pra pegar os nomes no PHP? estou usando a seguinte consulta:$busca = "SELECT usuario.nome, pedido.emitente, P1.NOME, P2.NOME, P3.NOME FROM pedidoLEFT JOIN aparelho P1 ON pedido.PRODUTO1 = P1.IDLEFT JOIN aparelho P2 ON pedido.PRODUTO2 = P2.IDLEFT JOIN aparelho P3 ON pedido.PRODUTO3 = P3.IDLEFT JOIN usuario on usuario.id=pedido.cliente WHERE usuario.nome='$cliente'";$resultado_busca = mysql_query($busca);While ($registro = mysql_fetch_assoc($resultado_busca)){echo $registro["emitente"]echo $registro["nome"] //aqui ele pega o clienteecho $registro["NOME"] //ae aqui ele pega o valor do ULTIMO PRODUTOcomo eu faria pra mostrar os 3 produtos???vlw mais um vez...té mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

vou responder rapidão bem resumido, dps explico com calma a query ae beleza?

cria um alias diferenciado para os campos com o mesmo nome, tipo:

$busca = "SELECT usuario.nome, pedido.emitente, P1.NOME AS NOME1, P2.NOME AS NOME2, P3.NOME AS NOME3 FROM pedido

LEFT JOIN aparelho P1 ON pedido.PRODUTO1 = P1.ID

LEFT JOIN aparelho P2 ON pedido.PRODUTO2 = P2.ID

LEFT JOIN aparelho P3 ON pedido.PRODUTO3 = P3.ID

LEFT JOIN usuario on usuario.id=pedido.cliente WHERE usuario.nome='$cliente'";

Bom, como cada produto está em diferentes campos facaria assim:

echo $registro["NOME1] //ae aqui ele pega o valor do ULTIMO PRODUTO

echo $registro["NOME2] //ae aqui ele pega o valor do ULTIMO PRODUTO

echo $registro["NOME3] //ae aqui ele pega o valor do ULTIMO PRODUTO

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

afffffffffffffffffffffff dinovoputzzzz...fantastico ahuahuhauuhahuaperfeito cara...vlw dinovoe uma hora q tu tiver tempo mesmo, tu me explica...abraço velhoté mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

afffffffffffff

velho...eu te amoooooooooo

putzzz...tentei esse seu segundo metodo e adicionei uma outra tabela e aparentemente esta funcionando tudo OK...fico assim ó:

 

SELECT usuario.nome, pedido.emitente, P1.NOME, P2.NOME, P3.NOME

FROM pedido

LEFT JOIN aparelho P1 ON pedido.PRODUTO1 = P1.ID

LEFT JOIN aparelho P2 ON pedido.PRODUTO2 = P2.ID

LEFT JOIN aparelho P3 ON pedido.PRODUTO3 = P3.ID

LEFT JOIN usuario on usuario.id=pedido.cliente

 

eu nunca q ia fazer isso O_O

tem como tu explicar isso pra mim??? pq eu nao entendi nadinhaaaa disso ahuahuhauahuahuuha

 

vlwzão velho xD

 

abraço, té mais ; )

Bom, como a estrutura da tabela utilizada contém mais de um campo com "referência" a mesma tabela, no caso o produto, uma forma de você conseguir a informação destes produtos é "ligando" estes campos à tabela.

Utilizei o LEFT JOIN para que o registro da tabela da esquerda (neste caso "pedido") seja exibido mesmo que não exista o produto na referência.

E como podem ser vários produtos (uma coluna para cada na tabela pedido), você pode utilizar um Join para fazer associação dos campos para uma mesma tabela:

LEFT JOIN aparelho P1 ON pedido.PRODUTO1 = P1.ID

LEFT JOIN aparelho P2 ON pedido.PRODUTO2 = P2.ID

LEFT JOIN aparelho P3 ON pedido.PRODUTO3 = P3.ID

Esse P1, P2, P3 foi só um "alias" (apelido) p/ facilitar na identificação de cada produto.

http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif ehehe acho que confundi mais, se pintar dúvida fala ae.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

hauhuauhauha, q nada cara...ajudo bastante!é q eu nem sabia da existencia dessa função de por: aparelho "espaço" P1, etc.uhahuahuauha, mas é isso ae, vivendo e aprendendo! =Dabraçao ae cara, e té mais ; )

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.