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
Duvida para fazer uma pesquisa no mysql
3 Respostas
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,
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.
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.