Ir para conteúdo

POWERED BY:

Arquivado

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

JonatasFn

Como buscar dados em 2 tabelas

Recommended Posts

Fala galera,

eu uso PHP + MySQL e faço as operações básicas, só que agora cai em um probleminha.

 

Tenho 3 tabelas que são:

-produtores

-produtores

-produtores_produtos

 

Já cadastrei os produtores e os produtos, agora preciso cadastrar 1 produtor para vários produtos e cadastrar em produtores_produtos.

 

Só que nessa tabela produtores_produtos que campos devo colocar? Eu tenho os campos id, id_produtor, produto. Só que depois preciso imprimir na tela a lista de produtores com seus respectivos produtos.

 

O problema agora é q não tenho o nome do produtor nesta tabela(e o correto era não ter tbm o nome do produto neh) e então preciso fazer uma outra consulta para através do id_produtor na tabela produtores_produtos pegar o nome do produtor na tabela produtores.

 

Isto está certo? Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esses dias eu tava folheando a documentação do MySQL e li sobre algo parecido.

 

Não sei se entendi bem seu problema, mas tente separar as consultas com ponto-e-vírgula.

 

Exemplo:

 

$consulta = mysql_query("SELECT * FROM produtos; SELECT * FROM clientes; SELECT * FROM qualquer_coisa;");

E assim vai... O resto é igual você está acostumado a usar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... beleza Jonatas..

então cara, eu fiz algo parecido aqui.

 

As tuas tabelas então são: "produtores", "produtos", e "produtores_produtos".

A idéia que me pareceu correta, foi fazer um relacionamento. Colocando na tabela "produtores_produtos" os campos:

"id_produtor"(esse aqui vai se repetir nessa tabela mesmo), "id_produto", e talvez um "id_de_registros_da_tabela".

 

Ai no caso, você faria consultas na tabela "produtores_produtos", para mostrar todos os produtos de certo produtor, já que ficaria o seguinte no banco:

produtor 1, produto 5

produtor 1, produto 7

produtor 1, produto 8

produtor 2, produto 5

produtor 2, produto 10 ...

 

O relacionamento mesmo, para você só gravar ID's nessa tabela, é um INNER JOIN.

"SELECT * FROM produtores_produtos INNER JOIN tabela ON campo = campo  WHERE ..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala William, acho q você me entendeu certinhu. Eu tenho esta três tabelas e o q preciso fazer é exibir uma lista com os nomes dos produtores e seus respectivos produtos. Só q não tá funcionando.

olha o que usei primeiro, tá exibindo o nome de todos os produtores mesmo quem não tem produto cadastrado e não exibe os produtos:

$sql = "select * from produtores left join prod_produtos on produtores.id = prod_produtos.id order by produtores.id desc";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... eu tb não sou bom nisso, tô entrando nessa de JOIN agora..

mas veja.. acredito que a base da pesquisa tenha que ser a tabela que relaciona as duas.

 

Ou pela nomeação que demos no começo do topico, a "produtores_produtos".

Ficando:

SELECT * FROM `produtores_produtos` ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

digamos que suas tabelas sejam assim

create table produto (

id_produto number,

nm_produto varchar(20));

 

create table produtor (

id_produtor number,

nm_produtor varchar(20));

 

create table produto_produtor (

id_produto_produtor number,

id_produto number,

id_produtor number);

 

 

teu select ficaria assim

select a.id_produto, a.nm_produto, c.id_produtor, c.nm_produtor 
from produto a
inner join produto_produtor b on (a.id_produto = b.id_produto)
inner join produtor c on (b.id_produtor = c.id_produtor)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, foi muito esclarecedora sua resposta. Mas tem uma coisa q não entendi:

select a.id_produto, a.nm_produto, c.id_produtor, c.nm_produtor

 

o que são esses pontos "a.", "c." ?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

sao so nomes das tabelas so que como ele usou alias sao os alias (apelidos) das tabelas

 

vou marcar onde foi definido os tres alias

 

select a.id_produto, a.nm_produto, c.id_produtor, c.nm_produtor

from produto a

inner join produto_produtor b on (a.id_produto = b.id_produto)

inner join produtor c on (b.id_produtor = c.id_produtor)

 

se nao quiser usar alias pode fazer o mesmo sem eles, apenas usando os nomes das tabelas

 

select produto.id_produto, produto.nm_produto, produtor.id_produtor, produtor.nm_produtor

from produto

inner join produto_produtor on (produto.id_produto = produto_produtor.id_produto)

inner join produtor on (produto_produtor.id_produtor = produtor.id_produtor)

 

Ficando a mesma coisa so que sem alias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certinhu. Mas agora eu tenho outra duvida:

Agora preciso que o usuario edite um determinado registro por exemplo:

 

preciso exibir tudo isso aí em cima mas só de um produtor.

 

Como se eu tivesse que acrescentar a expressão:

 

where id_produtor = $id_produtor;

 

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas é exatamente isso

 

Voce precisa de uma pagina de edicao que seria parecida com a de inclusao e seleciona o registro que precisa e preenche os campos

 

O que for alterado voce salva

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá, isto eu tenho eu quero saber como passar para pagina de edição, só o produtor fulano e seus respectivos produtos.

 

Na expessão acima eu tô exibindo todos os produtores e seus respectivos produtos!

 

Dá pra entender ou tá meio confusa a minha dúvida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cria uma VIEW que soh faça join nos campos que você precisa para a consulta e resposta.

 

aí fica rapidão

 

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, valew msm pela ajuda... mas eu não manjo muito e não entendi o q você quis dizer.

 

você pode me explicar, dar um exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe como faço uma busca com inner join para apenas um registro?

 

Estou usando a seguinte SQL:

select produto.id_produto, produto.nm_produto, produtor.id_produtor, produtor.nm_produtor
from produto
inner join produto_produtor on (produto.id_produto = produto_produtor.id_produto)
inner join produtor on (produto_produtor.id_produtor = produtor.id_produtor)

Funciona exatamente como eu queria, só que agora estou fazendo uma pagina pra editar os dados, e esta expressão acima exibe todos os registros e só preciso exibir um determinado registro para poder editar.

 

Como faço isto???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não basta colocar um "WHERE `tal` = 'tal' "??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce tem qeu indentificar o registro com um WHERE mesmo

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.