Jump to content
Fórum Script Brasil
  • 0

Sistema de busca por palavra


Under
 Share

Question

Olá

alguém pode me ajudar com um sistema de busca ?

Como deve ficar o WHERE para o sistema de busca, buscar por cada palavra digitada não pela frase

tipo tenho uma tabela de alunos

e la tem os registros com nome

Rogério Silva Junior

ai quando buscarem no campo de busca por rogério junior

apareça o resultado, por que só da resultado quando digito rogério silva ou rogério silva junior

alguém sabe?

o where ta

SELECT * FROM alunos WHERE nome LIKE '%" .$busca. "%'

Mais já tinha perguntado a outras pessoas e ela disseram que tinha que explodir a palavra e depois montar um loop para depois aparecer os resultado, alguém poe dizer como ficaria?

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Under

Numa lógica rápida é mais ou menos pelo que você viu mesmo: quebrar a string e ir pesquisando.

Porém, a questão é: como fazer a pesquisa?

Digamos que você tem um nome "João da Silva"

Se o usuário digitar "joao silva" você poderia montar uma query buscando pelas duas palavras exclusivamente:

SELECT nome FROM colaboradores WHERE UPPER(nome) LIKE '%joao%' AND UPPER(nome) LIKE '%silva%'

Nesse caso funcionaria corretamente, porém você precisa tomar cuidado com caracteres acentuados, que podem ser um grande problema.

Link to comment
Share on other sites

  • 0

Under,

Fiz um exemplo para você. Você pode refinar o código para realizar outros tipos de comparação, por exemplo: OR.

$q = 'Rogério Silva Junior';

$prefixArg = ' NOME LIKE \'%';


$strArgs = $prefixArg . implode('%\' AND ' . $prefixArg , explode(' ',$q)) . '%\'';

echo 'SELECT nome FROM colaboradores WHERE' . $strArgs;
Será impresso:
SELECT nome FROM colaboradores WHERE NOME LIKE '%Rogério%' AND NOME LIKE '%Silva%' AND NOME LIKE '%Junior%'

Link to comment
Share on other sites

  • 0
Full text search é uma solução. Com ela você não precisa "quebrar" strings.

Um abraço.

Realmente Willian, caso ele possuir acesso para executar comandos DDL, ele poderá adicionar um índice FULLTEXT. Ai fica mais fácil!

Se eu não me engano, somente a partir da versão 3 do MySQL essa feature está disponível e este índice somente pode ser atribuído para tabelas do tipo MyISAM.

Particularmente eu não gosto de trabalhar com MyISAM. Trabalho com InnoDB por permitir integridade referencial e suporte a transações.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...