2011-07-16 4 views
11

Je ne l'ai jamais vraiment entendu une réponse directe sur celui-ci, je dois juste FullText chercher une colonne couple avec plusieurs mots « Prénom Nom »MySQL FULLTEXT recherche plusieurs mots

$sql = mysql_query("SELECT * FROM 
        patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('% $term %' IN BOOLEAN MODE);"); 

Mais il ne parvient pas à exécuter la interroger si j'entre plus d'un mot ici.

Répondre

16
$sql = mysql_query("SELECT * FROM 
     patient_db WHERE 
     MATCH (Name, id_number) 
     AGAINST ('+first_word +second_word +third_word' IN BOOLEAN MODE);"); 

et si vous voulez faire la recherche exacte:

$sql = mysql_query("SELECT * 
        FROM patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('"exact phrase"' IN BOOLEAN MODE);"); 
+1

Quelqu'un peut-il m'éclairer s'il y a aussi une limite de combien de termes vous pouvez rechercher dans 1 MATCH CONTRE une requête? Dans l'exemple de cette réponse, vous avez third_word qui fonctionne également dans ma propre requête mais quand je mets le + quatrième_word et même s'il existe dans les colonnes, il renvoie un résultat vide. – vincent

+1

"expression exacte" ne signifie pas phrase exacte sans aucun signe (+/-) elle sera traitée comme un OU. il n'y a pas d'expression exacte dans la recherche en texte intégral, seulement tous les mots, quelques mots, aucun des mots. – Gamesh

+1

Ceci est changé sur une période de 5 ans – Vineet1982

4
SELECT * 
FROM patient_db 
WHERE MATCH (Name, id_number) 
     AGAINST ("Firstname Lastname" IN BOOLEAN MODE); 

Les guillemets sont importants. Cela cherche littéralement l'expression "Prénom Nom". Vous n'avez pas besoin des signes de pourcentage.

Si vous recherchez « Prénom Nom blahblahblah blahblah », la clause AGAINST() doit ressembler à ceci:

AGAINST ('+Firstname +Lastname' IN BOOLEAN MODE); 

Demandez regard sur le MySQL docs on full text search pour plus d'informations.

Autre chose: pourquoi avez-vous la colonne id_number dans votre match?

+0

Salut désolé j'ai posté avant que je suis allé au lit hier soir. Cela ne marche toujours pas pour moi, je n'ai qu'un seul champ de recherche appelé $ term et les noms First et Last sont dans la même colonne mySQL – iamwhitebox