Duvida para fazer uma pesquisa no mysql

3 respostas
A

Um exemplo
tenho campo id,nome,telefone em uma tabela
tenho um jtextfield para coletar o dado
eu não vou saber se é o id ou o nome da pessoa
como fazer a pesquisa retornar o nome por exemplo se eu digitar o nome ou o telefone se for o telefone

3 Respostas

ssh

Cara, você só tem 1 text field?
Caso sim, você pode testar o tipo de dado que foi inserido nele, se for real(número) você busca por CPF/ID/TELEFONE. Se for string você busca pelo nome.

Mas eu aconcelho a fazer um filtro, por exemplo utilizar um dropbox para selecionar o método de busca, seja ele por Nome, ou por telefone, ou por ID e assim por diante.

Ai você pega a informação do dropbox e faz a busca de acordo com o que foi selecionado no dropbox.

espero ter dado uma clareada.

att,

drsmachado

Isso em hipótese alguma é responsabilidade do banco de dados.
Você é quem deve implementar uma lógica que identifique o tipo de parâmetro que está sendo inserido.
Se a pesquisa poderá ser feita por cada um dos campos citados, eu criaria um formulário contendo todos eles, aí verificaria se o valor do textfield é nulo, se não for, coloco ele no select.

A

Há algum tempo venho pensando em implementar uma pesquisa neste formato.
Tenho dúvidas se para o usuário ficaria mais simples ou mais complexo.

O modelo tradicional para isso é o que o drsmachado citou.

Estou pensando em usar pesquisa semelhante ao google.
Você digita um trecho lá e o sistema procura, sem importar se é título, conteúdo (telefone ou cpf no seu caso).

Uma implementação inocente (e provavelmente de baixa performance) poderia ser:

SELECT campos FROM tabela WHERE concat(nome,cpf, telefone, ...) like '%VALOR_PESQUISADO%'

É claro que você deveria separar o VALOR_PESQUISADO para cada espaço…ficando algo assim:

SELECT campos 
  FROM tabela 
  WHERE concat(nome,cpf, telefone, ...) like '%VALOR_PESQUISADO[0]%'
  AND concat(nome,cpf, telefone, ...) like '%VALOR_PESQUISADO[1]%'
  ..
  AND concat(nome,cpf, telefone, ...) like '%VALOR_PESQUISADO[n]%'

Esse tipo de pesquisa pode ficar extremamente lenta com o passar do tempo, de acordo com o volume de dados.

Você poderia então, indexar todos os campos em um conteúdo só, utilizando uma ferramente de full text search.

Se vale a pena esse esforço para sua aplicação, você precisa avaliar.

Criado 30 de janeiro de 2012
Ultima resposta 30 de jan. de 2012
Respostas 3
Participantes 4