Hoje vamos continuar a nossa pequena seqüencia de tutoriais ensinando o básico do trabalho com PHP e MySQL.
Na parte anterior, ensinei a fazer uma consulta simples no MySQL, a consulta utilizada buscava as últimas 10 notícias da tabela de notícias e exibia-as seqüencialmente, da mais recente para a mais antiga.
Hoje vamos fazer uma consulta semelhante, mas iremos fazer o relacionamento entre as duas tabelas (noticias e categorias) para buscar apenas as notícias de uma categoria.
Começaremos o arquivo consulta-avancada.php da mesma forma que iniciamos o anterior, com um bloco de comentários que explica o arquivo e inclui o arquivo que cria a instância do MySQLi que será usada nesse novo arquivo.
<?php
/**
* PHP e MySQL para iniciantes
*
* Arquivo com um exemplo de consulta avançada ao banco de dados MySQL
*
* PHP 5+, MySQL 4.1+
*
* @author Thiago Belem <contato@thiagobelem.net>
* @link http://blog.thiagobelem.net/mysql/php-e-mysql-para-iniciantes-consulta-simples/
*/
// Inclui o arquivo que faz a conexão ao banco de dados
require_once('includes/mysqli.php');
?>
Agora iremos definir uma variável contendo o nome da categoria que iremos usar para filtrar as notícias… O conteúdo dessa variável está “hard coded” no arquivo, mas poderia ser dinâmico e vir da uma variável $_GET, por exemplo.
// Iremos buscar apenas as notícias da categoria "Esportes" $categoria = "Esportes"; // Essa variável poderia ter vindo, por exemplo, do $_GET
Feito isso, montaremos a consulta que será executada no banco de dados:
// Monta a consulta SQL para trazer as últimas 10 notícias ativas e que pertençam à categoria específica
$sql = "SELECT
Noticia.id, Noticia.titulo, Noticia.descricao,
Categoria.nome AS categoria
FROM `noticias` AS Noticia
INNER JOIN `categorias` AS Categoria
ON Categoria.`id` = Noticia.`categoria_id`
WHERE
Noticia.`ativa` = 1
AND
Categoria.`nome` = '{$categoria}'
ORDER BY Noticia.`cadastro` DESC
LIMIT 10";
O interessante dessa consulta é que ela busca os registros da tabela noticia que possuam um relacionamento com os registros da tabela categorias e, o registro correspondente na tabela categorias deve possuir o valor da variável $categoria no campo nome.
Para quem não entendeu a explicação acima, vale a pena a leitura do meu artigo Relacionamento de Tabelas no MySQL.
Continuando o script, rodamos a consulta e exibimos o resultado:
// Prepara a consulta OU mostra uma mensagem de erro
$resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR);
// Faz um loop, passando por todos os resultados encontrados
while ($noticia = $resultado->fetch_object()) {
// Exibe a notícia dentro de um bloco HTML
?>
<h2><?php echo $noticia->categoria; ?> - <?php echo $noticia->titulo; ?></h2>
<p><?php echo $noticia->descricao; ?></p>
<p><a href="noticia.php?id=<?php echo $noticia->id; ?>" title="Continue lendo essa notícia">Leia mais »</a></p>
<?php
} // while ($noticia = $resultado->fetch_object())
E, para finalizar, exibimos o total de resultados encontrados e limpamos a consulta da memória do PHP:
// Exibe o total de registros encontrados
echo "<p>Registros encontrados: {$resultado->num_rows}</p>";
// Libera o resultado para liberar memória
$resultado->free();
E vocês acabaram de ver um exemplo de consulta complexa usando MySQLi!
Faça o download dos arquivos desse tutorial aqui: PHP-e-MySQL-Consulta-Avançada.zip
Abraços e até a próxima!
Quer copiar esse post no seu site? Você pode!
Segundo a licença da Creative Commons você pode copiar e distribuir esse conteúdo desde que faça menção ao autor original, para isso é só copiar esse código no final do artigo quando for publicá-lo em seu site:
<p>Artigo originalmente publicado em <em>25 de julho de 2010</em> por <strong><a href="http://thiagobelem.net/" title="Thiago Belem, Desenvolvedor PHP">Thiago Belem</a></strong>: <a href="http://blog.thiagobelem.net/php-e-mysql-para-iniciantes-consulta-avancada/" title="PHP e MySQL para iniciantes – Consulta Avançada">PHP e MySQL para iniciantes – Consulta Avançada</a></p>
A não menção ao autor original da obra implicará em cópia e/ou distribuição ilegal de propriedade intelectual, o que é crime segundo a Lei n.º 9.610.





Nice Thanks you