Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Workshop de PHP
SEÇÕES
Manuais relacionados
+Workshop de PHP
Categorias
+MySQL
+Scripts em PHP

Índice do Manual Workshop de PHP
+ Gestão de ficheiros através de PHP
+ Upload de ficheiros com PHP
+ Verificar a existência de uma URL
+ Leitura sequencial de ficheiros com PHP
+ Escritura em ficheiros com PHP
+ Gestão de directórios com PHP
+ Função que escreve um campo select com valores de uma base de dados
+ Receber o último ID de uma inserção com PHP e MySQL
+ Recolher dados de um Select Multiple com PHP
+ Enviar e-mails pelo PHP
+ Validar um endereço email em PHP
+ Loop para receber todas as variáveis por POST em PHP
+ Enviar um formulário por mail com PHP
+ Paginação de resultados com PHP e MySQL
+ Usuários ativos com PHP
+ Listas de elementos com cores alternas em PHP
+ Programas de livre distribuição em PHP
+ phpMyAdmin
+ Formatação de uma cadeia
+ Cálculo dos dias de um mês em PHP
+ Contador simples para páginas PHP
+ Avaliações dos usuários em PHP
+ Rastrear os robôs de buscadores
+ Recomendar um site usando PHP
+ Criação de um log de erros
+ Comprimir página PHP
+ Contador PHP com imagens
+ Editor PHP Maguma Studio
+ SiteMaps de Google em PHP
+ Teste de velocidade de conexão à Internet
+ Mostrar Conteúdo de acordo com o país em PHP
+ Conteúdos em banco de dados com PHP
+ Problemas com as datas em timestamp Unix de PHP
+ Contar o número de linhas e caracteres em arquivo PHP
+ Transformação Doc, Odt ou Rtf para PDF
+ Preencher um arquivo RTF e gerar o PDF
+ Converter arquivos ods ou xls para pdf
+ PHP isam, ferramenta Web para Arquivos Planos
+ Undefined variable ou Undefined index
+ Agregar carinhas ao sistema
+ Paginator, script para paginação com PHP e MySQL
+ Executar scripts PHP automaticamente através do cron com CURL
+ Uso do FTP com PHP
+ Instalação de One or Zero PHP Helpdesk
+ Portal PHP Nuke
+ Gerando feed RSS de notícias em PHP
+ Blasten blt-SEARCH 1.0.5
+ Classes e Objetos em PHP
+ Recuperando a qualidade de uma imagem JPEG
+ Comprovar se existe o domínio do correio
+ Tutorial de BBCode
+ Função em PHP para o cálculo de minutos transcorridos em duas horas dadas
+ Criação de gráficos em PHP com JpGraph
+ Gerar documentos de Word RTF com PHP
+ Introdução ao Symfony
+ Arredondar decimais em PHP
+ Envio de boletins a e-mails de um banco de dados MySQL
+ Htaccess e páginas dinâmicas
+ Criando imagens com PHP
+ Programar um buscador com PHP e MySQL
+ Loop para receber todos os dados de uma fila de um recordset com PHP

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Programar um buscador com PHP e MySQL

Passos a seguir para a criação de um buscador com PHP e MySQL.


Suponho que o leitor esteja familiarizado com a programação em PHP e com a administração básica de Mysql.

Como ponto de partida, temos que ter a informação a buscar armazenada e, uma tabela de nosso banco de dados. Colocamos como exemplo uma tabela com artigos técnicos que chamaremos ARTIGOS. Esta tabela ARTIGOS terá como mínimo dois campos chamados TITULO e DESENVOLVIMENTO, que armazenarão o título do artigo e seu conteúdo respectivamente.


Os tipos dos campos a buscar deverão ser CHAR, VARCHAR ou TEXT com suas variantes.

Agora desenharemos uma página com um formulário e uma caixa de texto para escrever a cadeia de consulta "busca" e chamar ao script de busca "buscar.php". Exemplo:

<FORM METHOD=POST ACTION="buscar.php">
Buscar: <INPUT TYPE="text" NAME="busca">
</FORM>


No arquivo buscar.php é onde está o clique da questão.
Há que fazer a consulta que busque as palavras e devolva como resultado os registros coincidentes. Ate aqui parece fácil e poderíamos resolvê-lo assim:

SELECT * FROM ARTIGOS WHERE DESENVOLVIMENTO LIKE '%$busca%' OR TITULO LIKE '%$busca%'

Pois esta consulta nos mostrará todos os artigos em seu título ou que em seu conteúdo apareça a frase de busca tal e como nós a introduzimos. Isto é muito limitado já que uma mudança na ordem das palavras ou um artigo de separação terminará com nossa busca não mostrando os resultados desejados.
Também poderíamos depurar e melhorar a sintaxe de nossa busca utilizando o operador LIKE, porém as buscas resultariam muito lentas e não teriam o resultado esperado.

A solução mais eficiente é utilizar os índices FULLTEXT especificamente indicados para estas funções. Sendo assim, isto implica ir ao nosso banco de dados e criar um índice FULLTEXT com todos os campos que desejamos incluir em nossa busca, que em nosso caso são TITULO e DESENVOLVIMENTO. Para isso, basta com o phpmyadmin ou então escrever a instrução diretamente:

ALTER TABLE ARTIGOS ADD FULLTEXT(TITULO, DESENVOLVIMENTO);


Uma vez criado o índice a instrução SQL para buscar será:

SELECT * FROM ARTIGOS WHERE MATCH(TITULO, DESENVOLVIMENTO) AGAINST ('$busca')

Esta linha utiliza a função MATCH ... AGAINST ... que encontra o texto buscado, usando consultas em linguagem natural parecida a como o fazem os motores de busca. Ademais, se calcula internamente uma pontuação em função de como aparecem os termos buscados dentro de nosso artigo.

Aperfeiçoando a busca:

SELECT * , MATCH (TITULO,DESENVOLVIMENTO) AGAINST ('$busca') AS pontuacao FROM ARTIGOS WHERE MATCH (TITULO, DESENVOLVIMENTO) AGAINST ('$busca') ORDER BY pontuacao DESC LIMIT 50

Esta linha devolve os 50 primeiros resultados encontrados ordenados de mais a menos pontuação. O valor da pontuação é um número decimal compreendido entre 0 e 1 por cada ocorrência do padrão da busca, que se irá somando se esse padrão for encontrado em várias ocasiões. De qualquer forma esta pontuação é um algoritmo interno do banco de dados.

Alguns problemas: As buscas realizadas com MATCH ...AGAINST em ocasiões falham quando o termo a buscar contém uma só palavra. Do contrário são umas buscas rapidíssimas que produzem melhores resultados que outros métodos mais rudimentares como o LIKE quando se trata de várias palavras ou frases.

A solução que dei a esse problema das buscas com MATCH...AGAINST foi checar o número de palavras a buscar, utilizando uma busca simples com LIKE no caso de uma só palavra, e o método MATCH...AGAINST no caso de várias. Exemplo do arquivo buscar.php

<?php
//cadeia de conexao
mysql_connect("host","usuario","password");
//DEVO PREPARAR OS TEXTOS QUE VOU BUSCAR se a cadeia existe
if ($busca<>''){
   //CONTA O NUMERO DE PALAVRAS
   $pedacos=explode(" ",$busca);
   $numero=count($pedacos);
  if ($numero==1) {
   //SE SO HA UMA PALAVRA DE BUSCA SE ESTABELECE UMA INSTRUCAO COM LIKE
   $cadbusca="SELECT REFERENCIA, TITULO FROM ARTIGOS WHERE VISIBLE =1 AND DESARROLLO LIKE '%$busca%' OR TITULO LIKE '%$busca%' LIMIT 50";
  } elseif ($numero>1) {
  //SE HA UMA FRASE SE UTILIZA O ALGORTIMO DE BUSCA AVANCADO DE MATCH AGAINST
  //busca de frases com mais de uma palavra e um algoritmo especializado
  $cadbusca="SELECT REFERENCIA, TITULO , MATCH ( TITULO, DESENVOLVIMENTO ) AGAINST ( '$busca' ) AS Score FROM ARTIGOS WHERE MATCH ( TITULO, DESENVOLVIMENTO ) AGAINST ( '$busca' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacao", $cadbusca);
While($row=mysql_fetch_object($result))
{
   //Mostramos os titulos dos artigos ou o que desejemos...
  $referencia=$row->REFERENCIA;
   $titulo=$row->TITULO;
   echo $referencia." - ".$titulo."<br>";;
}
?>


Links para completar esta informação:
http://www.fabio.com.ar/verpost.php?id_noticia=959
http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Workshop de PHP

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em MySQL
+ Entrar em Scripts em PHP


Comentário sem rever
Entre os comentários não revistos podem ter alguns interessantes que tenham sido enviado recentemente.
 Foi encontrado um comentário sem rever

VerVer os comentários não revistos



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites