SlyX 0 Denunciar post Postado Janeiro 22, 2015 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
Motta 645 Denunciar post Postado Janeiro 22, 2015 tenho) de exibir o nome do produto anterior Que campo identifica isto !? Compartilhar este post Link para o post Compartilhar em outros sites
SlyX 0 Denunciar post Postado Fevereiro 23, 2015 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
Motta 645 Denunciar post Postado Fevereiro 23, 2015 http://forum.imasters.com.br/topic/490845-query/ Veja se ajuda Compartilhar este post Link para o post Compartilhar em outros sites
Lucas DIllenburg 1 Denunciar post Postado Fevereiro 25, 2015 Amigo usa essa lógica $buscafk = mysql_query("SELECT column_name(s)FROM table1INNER JOIN table2 ON table1.column_name=table2.column_nameINNER 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