2010-08-18 4 views
1

J'ai un tableau qui contient des informations de contact. Cette table a 1 colonne pertinente pour les noms. Il ressemble à ceci:Utilisation de LIKE pour rechercher un nom

Sort Name: 
Doe, John 
Clinton, Bill 
Dooby Doo, Scooby 

Malheureusement, il n'y a pas prénom/colonnes de nom, et ils ne peuvent être ajoutés. Si un utilisateur entre le terme de recherche "john doe", y a-t-il un moyen pour que mysql renvoie la colonne "Doe, John" comme résultat?

Edit: En tant que suivi de la réponse par RHSeeger, que ferais-je pour faire

john doe 

dans

$name(0=>'john', 1=>'doe') 

utilisant php

Merci pour l'aide à ce jour

Répondre

2

Ma pensée serait:

SELECT * FROM tablename 
WHERE LOWER(sort_name) LIKE '%name1%' 
    ... 
    AND LOWER(sort_name) LIKE '%nameN%' 

où <nom1> ... <nameN> sont l'individu, "mots" en minuscules (divisés sur l'espace, virgule?) Au nom demandé par l'utilisateur. Editer: Il est intéressant de noter que, pour un ensemble de données de taille raisonnablement grande, les recherches de ce type seront lentes. Si vous allez avoir beaucoup de données, vous pouvez envisager un moteur de recherche (comme SOLR) que vous utilisez pour rechercher des choses, et en utilisant MySQL juste pour la recherche par ID.

+0

Et que ferais-je de prendre john doe dans $ name (0 => 'john', 1 => 'doe') – clang1234

+0

Je ne peux pas répondre à la question dans votre commentaire, car je ne connais pas bien PHP du tout. Je ne parlais que du composant MySQL. – RHSeeger

+0

exploser ("", "john doe"); produirait un tableau (0 => "john", 1 => "doe") –

0

Dans votre application, divisez le terme de recherche au dernier espace, modifiez l'ordre et ajoutez une virgule entre les deux.

+0

Cela échouera si l'entrée utilisateur « scooby dooby » mais a laissé le doo – clang1234

0

Je commencerais par analyser la recherche en mots séparables "john" et "doe", puis écrire une recherche en utilisant la fonctionnalité LIKE pour les deux termes.

EDIT: Pour répondre à votre question d'une réponse ci-dessous ... comment analyser « John Doe » dans « John » et « Doe » Je voudrais écrire une procédure stockée MySQL pour les séparer dans un jeu de résultats contenant " John "et" Doe ", puis utilisez le même nom par rapport à ce nom de colonne

0

Regardez dans l'opérateur SQL" like ". Par exemple

select * from TABLENAME 
where sort_name like '%doe' 

Vous devez faire un peu de manipulation aux termes de recherche sur le côté de l'application et éventuellement fournir d'autres clauses conditionnelles dans votre instruction SQL avec d'autres clauses comme.

0

ont un index de texte intégral sur la colonne de noms, puis ce faire,

select * from names where match(name) against ('john doe'); 
Questions connexes