Ir para conteúdo

Arquivado

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

SlyX

Select em 3 Tabelas

Recommended Posts

Amigos,

 

Nunca aprendi direito estas questões de inner join, left join, right join, subselect (sempre tive dificuldade em que casos usar qual).

 

Mas vamos ao exemplo prático.

 

Tenho 3 tabelas

 

vendas (id, id_vendedor, id_produtoanterior, id_produto, ...)

vendedores (id, nome, ....)

produtos (id, titulo, ...)

 

Atualmente usava esta query:

SELECT T1.*, T2.nome as vendedor, T2.id as id_vendedor, T3.titulo as produto
FROM vendas T1
INNER JOIN vendedores T2 ON T1.id_vendedor = T2.id
INNER JOIN produtos     T3 ON T1.id_produto  = T3.id
WHERE T1.id='$id'
Tudo funcionava beleza, a questão é que eu não tinha necessidade (que agora tenho) de exibir o nome do produto anterior (no caso ele tem o id na tabela de vendas, mas o titulo dele esta na tabela produtos), tentei fazer algo assim, mas não deu certo.


SELECT T1.*, T2.nome as vendedor, T2.id as id_vendedor, T3.titulo as produto, T4.titulo as produto
FROM vendas T1
INNER JOIN vendedores T2 ON T1.id_vendedor = T2.id
INNER JOIN produtos     T3 ON T1.id_produto  = T3.id

INNER JOIN produtos     T4 ON T1.id_produto  = T4.id
WHERE T1.id='$id'

Obviamente não deu certo. Acredito que o inner join neste caso não seja o adequado e sim um subselect (afinal, só quero puxar as informações como "titulo do produto" e "nome do vendedor" de outras tabelas, oq poderia ser resolvido com algo tipo:
SELECT * from vendas T1, produtos T2, vendedores T3 WHERE (select nome as vendedor from T3 where T3.id = T1.id_vendedor), (select titulo as produto from T2 where T2.id = T1.id_produto), (select titulo as produtoanterior from T2 where T2.id_produtoanterior = T1)
Ou algo assim (ideia principal, algusn nomes das tabelas estão trocado, mas esta seria a tabela real, porque "vendedores" na verdade é funcionário:

SELECT * FROM vendas WHERE id='1667'
SELECT funcionarios.nome as vendedor FROM funcionarios WHERE funcionarios.id = vendas.id_vendedor
SELECT produtos.titulo as plano FROM produtos WHERE produtos.id = vendas.id_produto
SELECT produtos.titulo as planoantigo FROM produtos WHERE produtos.id = vendas.id_produtoantigo

Compartilhar este post


Link para o post
Compartilhar em outros sites
tenho) de exibir o nome do produto anterior

 

 

 

 

 

Que campo identifica isto !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

 

Que campo identifica isto !?

 

Seria o "T3.titulo"

 

É uma tablea que tem "id, titulo" (ou seja, o nome dos produtos estão nesta tabela)

como falei, na primeira sql funcionava tudo normal, acontece que agora o registro tem o "produto atual" e o "produto antigo"

 

Ambos os titulos estão no T3.titulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo usa essa lógica

 

 

$buscafk = mysql_query("
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name=table2.column_name
INNER JOIN table3 ON table1.column_name=table3.column_name;")

 

 

while ($result = mysql_fetch_array ($buscafk)){

$fknome=$result['nome_campo'];

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.