PHP e MySQL - JOINS em 2 tabelas ou mais
E aí pessoal do fórum, este é meu primeiro artigo aqui no fórum e espero que possa ser útil!
Bom, me deparei com a seguinte situação: eu tinha 2 bancos de dados MySQL, e precisava montar uma tabela HTML, que exibisse os dados de 3 tabelas, onde 2 se encontravam no banco base e 1 no banco clientes.
Pra vocês entenderem, vamos simular que temos 2 bancos (base e clientes).
No banco base, temos as tabelas (usuario e uf), que armazenam o id e nome do usuário, e id e sigla UF respectivamente.
E no banco clientes, temos 1 tabela que se chama pedidos, que armazena o pedido, o id do usuario(que fez o pedido), e o id da sigla UF, e a data do pedido.
Inicialmente, eu fazia a consulta e utilizava um laço while, e pelo id (do usuario e uf), eu fazia outra consulta pra pegar o nome e a sigla. Veja abaixo:
OK, funciona certinho, mas, pensando em desempenho, se em uma consulta obtivéssemos 30 resultados, essas outras 2 consultas dentro do while resultariam em mais 60 consultas ao banco.
E se em determinado momento 9 usuários realizassem a mesma consulta com os 30 resultados, resultariam em 540 consultas, resumindo, percebi o tamanho da redundância e perda de desempenho.
Bom, me deparei com a seguinte situação: eu tinha 2 bancos de dados MySQL, e precisava montar uma tabela HTML, que exibisse os dados de 3 tabelas, onde 2 se encontravam no banco base e 1 no banco clientes.
Pra vocês entenderem, vamos simular que temos 2 bancos (base e clientes).
No banco base, temos as tabelas (usuario e uf), que armazenam o id e nome do usuário, e id e sigla UF respectivamente.
E no banco clientes, temos 1 tabela que se chama pedidos, que armazena o pedido, o id do usuario(que fez o pedido), e o id da sigla UF, e a data do pedido.
Inicialmente, eu fazia a consulta e utilizava um laço while, e pelo id (do usuario e uf), eu fazia outra consulta pra pegar o nome e a sigla. Veja abaixo:
OK, funciona certinho, mas, pensando em desempenho, se em uma consulta obtivéssemos 30 resultados, essas outras 2 consultas dentro do while resultariam em mais 60 consultas ao banco.
E se em determinado momento 9 usuários realizassem a mesma consulta com os 30 resultados, resultariam em 540 consultas, resumindo, percebi o tamanho da redundância e perda de desempenho.
Páginas:
1
2
Olá, estou precisando de ajuda urgente, tenho duas tabelas no MySql e preciso fazer uma consulta na tabela associados através do resultado do login na tabela usuarios, ou seja, esta consulta:
select * from associados where IdAssociado=IdAssocidado(da tabela usuarios que foi logada na pagina de login). Então como resultado deve aparecer todos os dados do associado. Se fosse em delphi, vb, já tinha feito, mas, em php não sei como pegar o parâmetro da pagina de login para enviar para a pagina de consulta da tabela e preencher os dados. Se alguém puder me ajudar eu agradeço e me ponho a disposição a fazer o mesmo. Obrigado.
select * from associados where IdAssociado=IdAssocidado(da tabela usuarios que foi logada na pagina de login). Então como resultado deve aparecer todos os dados do associado. Se fosse em delphi, vb, já tinha feito, mas, em php não sei como pegar o parâmetro da pagina de login para enviar para a pagina de consulta da tabela e preencher os dados. Se alguém puder me ajudar eu agradeço e me ponho a disposição a fazer o mesmo. Obrigado.
13/08/2010 2:45pm
(~14 anos atrás)
Olá Michael!
Parabéns pelo artigo! Me ajudou muito! Conseguiu esclarecer de forma simples o uso do Join. Parabéns e obrigado!
Parabéns pelo artigo! Me ajudou muito! Conseguiu esclarecer de forma simples o uso do Join. Parabéns e obrigado!
11/03/2010 9:47am
(~14 anos atrás)
Então ClaudioCR, em PHP é simples, vou usar como exemplo, uma tabela onde você queira os clientes de um estado.
A query seria esta:
Neste caso, temos um inteiro como parâmetro, então:
Supondo que o parâmetro fosse uma string:
Espero que tenha ajudado, qualquer coisa estamos ae!
A query seria esta:
SELECT * FROM clientes WHERE clientes.id_estado = 1;
SELECT * FROM clientes WHERE clientes.id = $variavel;
Supondo que o parâmetro fosse uma string:
SELECT * FROM clientes WHERE clientes.nome = '".$variavel."';
Espero que tenha ajudado, qualquer coisa estamos ae!
08/02/2010 8:58am
(~15 anos atrás)
Olá, estou procurando e ainda não encontrei.
Postei minha duvida no mysql.com, mas ateh agora ninguém me respondeu.
Não foge muito do tema deste post.
E se os valores fossem inseridos via variãvel? Como uso o % com $variavel? Ex:
Para ver o post no mysql.com o link:
http://forums.mysql.com/read.php?52,325108,325108#msg-325108
Postei minha duvida no mysql.com, mas ateh agora ninguém me respondeu.
Não foge muito do tema deste post.
E se os valores fossem inseridos via variãvel? Como uso o % com $variavel? Ex:
"LIKE '%$atividade%'"
http://forums.mysql.com/read.php?52,325108,325108#msg-325108
07/02/2010 1:36pm
(~15 anos atrás)
Olá Amanda, obrigado por seu comentário. Espero que possa te ajudar na resolução da sua dúvida.
Assumindo que temos uma tabela de disciplinas, e que nessa tabela temos um campo, vamos chamá-lo de id_disciplina, que vem a ser um campo único que vai representar cada uma das disciplinas.
Já na tabela professores, teremos também um campo único que será a identificação dos professores, que vamos chamá-lo de id_professor.
Bom, agora temos que entender uma coisa. Nos banco de dados, existe algo chamado relacionamentos, que nada mais é do que ligações, entre 2 ou mais tabelas. Temos 3 tipos de relacionamentos: um para um, um para muitos e muitos para muitos. Só vou explicar a respeito do muitos para muitos, que é o nosso caso. Quando há um relacionamento assim entre 2 tabelas, não podemos interligá-las diretamente. Veja, pra ficar fácil, vamos supor que temos 3 disciplinas, e 5 professores. Os 2 primeiros professores, lecionam a disciplina 1 e 2. Já os ultimos 3 professores, lecionam a disciplina 3. Não tem como definir isso, diretamente entre essas 2 tabelas. Então, quando há esse tipo de relacionamento, temos que criar uma tabela associativa. Que nada mais é do que uma tabela, onde cada registro vai armazenar o id do professor e o id da disciplina que leciona. Assim, vc pode ter 50 ou quantos professores forem necessários que lecione na determinada determinada disciplina. A nossa vai se chamar leciona_disciplina.
Assim, montamos a seguinte query:
Nessa consulta, serão listados todas as disciplinas que o professor com o id 2 leciona.
Qualquer dúvida, é só falar!
Assumindo que temos uma tabela de disciplinas, e que nessa tabela temos um campo, vamos chamá-lo de id_disciplina, que vem a ser um campo único que vai representar cada uma das disciplinas.
Já na tabela professores, teremos também um campo único que será a identificação dos professores, que vamos chamá-lo de id_professor.
Bom, agora temos que entender uma coisa. Nos banco de dados, existe algo chamado relacionamentos, que nada mais é do que ligações, entre 2 ou mais tabelas. Temos 3 tipos de relacionamentos: um para um, um para muitos e muitos para muitos. Só vou explicar a respeito do muitos para muitos, que é o nosso caso. Quando há um relacionamento assim entre 2 tabelas, não podemos interligá-las diretamente. Veja, pra ficar fácil, vamos supor que temos 3 disciplinas, e 5 professores. Os 2 primeiros professores, lecionam a disciplina 1 e 2. Já os ultimos 3 professores, lecionam a disciplina 3. Não tem como definir isso, diretamente entre essas 2 tabelas. Então, quando há esse tipo de relacionamento, temos que criar uma tabela associativa. Que nada mais é do que uma tabela, onde cada registro vai armazenar o id do professor e o id da disciplina que leciona. Assim, vc pode ter 50 ou quantos professores forem necessários que lecione na determinada determinada disciplina. A nossa vai se chamar leciona_disciplina.
Assim, montamos a seguinte query:
SELECT d.nome FROM disciplinas d JOIN leciona_disciplina lec ON lec.id_disciplina = d.id_disciplina JOIN professores p ON p.id_professor = lec.id_professor WHERE lec.id_professor =2
Nessa consulta, serão listados todas as disciplinas que o professor com o id 2 leciona.
Qualquer dúvida, é só falar!
28/10/2009 10:49am
(~15 anos atrás)
adorei o artigo.
estou criando uma pauta eletronica na qual, quando o professor se logar deverá aparecer SOMENTE AS DISCIPLINAS QUE ELE DÁ AULA. gostaria de saber como se faz isso.
desde já agradeço a colaboração.
estou criando uma pauta eletronica na qual, quando o professor se logar deverá aparecer SOMENTE AS DISCIPLINAS QUE ELE DÁ AULA. gostaria de saber como se faz isso.
desde já agradeço a colaboração.
28/10/2009 3:18am
(~15 anos atrás)
Muito bom seu artigo.
Já sabia como fazer JOINS, mas tive bastante dificuldade em aprender por falta de explicações legais como essa.
E faço como o Joelson postou, é a mesmo por menos.
Valeu.
Já sabia como fazer JOINS, mas tive bastante dificuldade em aprender por falta de explicações legais como essa.
E faço como o Joelson postou, é a mesmo por menos.
Valeu.
01/10/2009 2:27pm
(~15 anos atrás)
Muito bom, com esse artigo eu aprendi a usar o JOIN.
Agora falta eu aprender Select aninhado.
Agora falta eu aprender Select aninhado.
21/07/2009 12:46am
(~15 anos atrás)
Zariel, fico contente em saber que o artigo foi útil pra você!
Joelson, obrigado pelo complemento, realmente eu não conhecia essa forma de junção. Mas prefiro utilizar o JOIN a modelo que exemplifiquei no artigo, pensando na manutenção do sistema. Fica mais fácil identificar quem é quem, ainda mais se você tiver junção com 3 ou mais tabelas.
Valeu!
Joelson, obrigado pelo complemento, realmente eu não conhecia essa forma de junção. Mas prefiro utilizar o JOIN a modelo que exemplifiquei no artigo, pensando na manutenção do sistema. Fica mais fácil identificar quem é quem, ainda mais se você tiver junção com 3 ou mais tabelas.
Valeu!
19/06/2009 8:37am
(~15 anos atrás)
select * from associados where IdAssociado=IdAssocidado(da tabela usuarios que foi logada na pagina de login). Então como resultado deve aparecer todos os dados do associado. Se fosse em delphi, vb, já tinha feito, mas, em php não sei como pegar o parâmetro da pagina de login para enviar para a pagina de consulta da tabela e preencher os dados. Se alguém puder me ajudar eu agradeço e me ponho a disposição a fazer o mesmo. Obrigado.
Alex, bom, é recomendável que você envie o formulário via post, assim, na página que vai consultar, você faz algo semelhante:
$sql = mysql_query("Select * from associados where email=".$POST['login']." AND senha='".$POST['senha']."' LIMIT 1;");
if ($sql){
//usuario encontrado, redireciona p/ index.php, por exemplo
} else {
print "dados não conferem", e redireciona pra login.php
}
Lógico que isso ae tá super simples, sem validação, segurança e tal, mas com esse código vc já consegue logar o usuario.
Dá uma olhada na sessão de scripts do site que tem sistemas de logins completos e funcionais.
Espero ter ajudado!