Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2007, 14h27   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
Par défaut recherche par similarité

bonjour,

je cherche une solution pour effectuer une recherche par élément similaire
c'est a dire

ex :
dans ma base j'ai stocké dans un champ titre : F.E.A.R.

fear ou f.e.a.r. ou encore FEAR ressortira le résultat présent dans la table (donc insensible à la casse en plus de gérer les points ou autre tiret)

les requêtes like ou regex ou match ne donnent rien jusqu'a présent

ma requête actuelle :

Code :
1
2
 
SELECT id_fiche, f_titre, f_date,f_valide,f_texte,f_liens,f_plateforme,p_nom,f_sortie_fr,c_nom,e_nom FROM iv_fiches INNER JOIN iv_plateforme ON iv_fiches.f_plateforme = iv_plateforme.id_plateforme INNER JOIN iv_categorie ON iv_fiches.f_categorie = iv_categorie.id_categorie LEFT JOIN iv_editeur ON iv_fiches.f_editeur = iv_editeur.id_editeur WHERE f_valide=\'2\' AND MATCH (f_titre,f_texte,f_titre_us,f_titre_jap) AGAINST (\''.addslashes($mcle).'\' IN BOOLEAN MODE)
merci
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 14h49   #2
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
une idée :
UPPER() existe en sql

pour ignorer la casse :
le mot que tu recherches tu le colles en upercase et et tu mets en upper le champ de ton enregistrement

et donc avec une condition
WHERE UPPER(champ_titre) LIKE %mot_en_uppercase
tu n'as plus besoin de t'embeter avec la casse
(et ça doit aussi marcher dans l'autre sens en lowercase...)


ensuite ça dépend de comment tu réutilises ton champ titre
s'il sert juste à la recherche interdit toi les points et tirets dedans.
(ainsi F.E.A.R. devient FEAR)
et dans la recherche

sur ton mot tu enlèves (en PHP) les caractères génants (avec plusieurs split et join pour enlever les points, tirets et tout ce que tu veux) avant de l'utiliser dans ta recherche

ainsi hop tu vires les caractères qui gènent avant la requete et dans la requete tu t'arranges pour ignorer la casse (comme au dessus)
et hop c bon.



et si le titre doit rester tel quel, il va te falloir chercher dans les fonctions de manipulation sql comment faire pour retirer les caractères génants au niveau de ton enregistrement (mais avec google tu trouveras rapidement les fonctions de manipulations de chaines de caractères)
mais ça risque de compliquer ta requete si tu veux supprimer beaucoup de caractères génants.




ou alors autre idée
tu peux aussi prendre le mot recherché, enlever les caractères génants
et le découper lettre par lettre
ensuite tu créés une chaine %1erelettre%2emelettre%3emelettre.... etc
que tu utiliseras avec like
ça devrait marcher mais ça risque aussi de sortir des résultats sans rapport

(en cherchant toto on risque de tomber sur TOTal abOmination par exemple)
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h32.


 
 
 
 
Partenaires

Hébergement Web