Usar inner join em suas consultas mysql é de extrema importância, no processo de otimização de uma página, seja ela PHP ou o que for.
É bastante comum programadores sem muita experiência fazerem várias consultas ao banco de dados para por exemplo pegar o resultado de 2 tabelas.
Veja um exemplo:
Temos 2 tabelas. Uma de nome categorias que contém as seguintes colunas: id | nome. Temos registrado nessa tabela a categoria “Tutoriais PHP”, e outras categorias também. Suponhamos que a categoria Tutoriais PHP tem id 23
Temos também a tabela artigos, onde temos registrados diversos artigos, entre eles, vários artigos pertencentes a categoria Tutoriais PHP. As colunas da tabela artigos são: id | cat | titulo | conteudo
Temos então o seguinte registro:
18 | 23 | Formulario de e-mail em ASP | conteudo do artigo
É então passada a seguinte URL www.site.com/tutoriais.php?cat=Tutoriais PHP onde deverá listar todos os artigos da categoria Tutoriais PHP
Um programador php muito inexperiente, faria algo como abaixo.
$check_cat2 = “SELECT id FROM categorias WHERE nome=’$nomecategoria’”;
$check_cat2 = mysql_query($check_cat2);
while ($row_tag=mysql_fetch_array($check_cat2)){
$id_categoria=$row_tag['id'];
$cadas = mysql_query(“SELECT * FROM artigos WHERE cat=’$id_categoria’”);
$row=mysql_fetch_array($cadas);
$titulo_artigo$row['titulo'];
$conteudo_artigo$row['conteudo'];
//aqui toda a parte reponsavel por exibir o conteudo na pagina
}
No exemplo acima é feito o seguinte. Na primeira consulta traduzindo: Seleciona o id da categoria onde categoria é igual a variavel $nomecategoria. Em $nomecategoria por exemplo, podemos temos “Tutoriais PHP”. Ou seja. Estamos fazendo uma consulta para pegar a id da categoria “Tutoriais PHP”
Então agora que pegamos o id da categorias Tutoriais PHP, fazemos outra para pegar os artigos pertencentes a esta categoria.
Parece tudo bonitinho. Não é?
Não. Realmente não está nada legal o código. Se for um banco de dados com milhares de registros, a perda de desempenho será grande.
Uma solução muito mais eficiente seria ao invés de fazer 2 consultas, fazer apenas uma, usando o INNER JOIN. Com inner join pode-se pegar dados de várias tabelas ao mesmo tempo, aumentando assim o desempenho das suas consultas.
Não vamos tratar detalhes deste assunto. Você pode ver claramente como utilizar o inner join no mysql, neste link: http://brasiltutoriais.com.br/relacionamento-de-tabelas-no-mysql/ – Eu também não sabia como utlizar. Vale muito a pena ler.




sáb, fev 6, 2010
PHP