2009-09-01 7 views
2

J'ai le script suivantrecherche du texte intégral renvoie uniquement les correspondances exactes

select c.id 
from ".TBL_COUPONS." as c 
inner join ".TBL_BUSINESS." as b 
on c.business_id = b.business_id 
inner join ".TBL_BLOCATION." as l 
on c.business_id = l.business_id 
where 
(match(c.name) against ('$search') 
    or 
match (b.name,b.category,b.subcat) against ('$search')) 
and l.zip = '$zip' 

pourquoi ce retour que les correspondances exactes? Par exemple, si je recherche un serrurier, rien ne se présente. mais si je cherche des serruriers j'obtiendrais deux résultats. (les deux recherches incluaient $ zip = '75061')

Répondre

2

Une façon de le faire est de remplacer les derniers caractères avec doivent être changés une carte sauvage et faire le MATCH() CONTRE en mode booléen

Le terme de recherche « serrurier » en php pour « serrurier * » et votre code serait quelque chose comme ça

match(c.name) against ('$search' IN BOOLEAN MODE) 

pour des raisons générales, vous devez supprimer l « », « ed », « ing », etc. des mots dans le terme de recherche d'origine et ajoutez la wild card * à la fin.

0

Votre table est-elle correcte avec le fulltext restrictions?

+0

Pour autant que je peux dire oui. –

+0

est Latin 1 un jeu de caractères multi-octets? –

0

Voici comment fonctionne la correspondance de texte intégral. Il ne connaît pas les pluriels et correspond à des mots entiers. Le problème se présente de temps en temps. Parfois, lorsque vous voyez une suggestion générée "Vouliez-vous dire ..." c'est une page qui tente de résoudre ce problème.

+1

Devrais-je utiliser LIKE alors? J'ai besoin de variantes. –

Questions connexes