Rechercher des "noms approchants" dans une table mySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Rechercher des "noms approchants" dans une table mySQL

Re: Rechercher des "noms approchants" dans une table mySQL

par AB » 01 sept. 2010, 17:50

Bonjour,
Je voulais être un peu plus large que l'égalité stricte nom-prénom-date de naissance pour permettre aux utilisateurs de "se tromper un peu" (ou d'entrer des data qu'on leur a fournies mal orthographiées ou téléphonées, ça arrive) et éviter les ennuis ensuite. Mais ça me semble compliqué, en effet. Le mieux est sans doute d'alerter les utilisateurs qu'il faut faire très attention !

anne22
Bah sans identifiant unique (tel, mail etc.) il pourra toujours se glisser quelques erreurs. Le problème est que le système que tu voudrais mettre en place risque d'être plus gênant (car incohérent) qu'utile...
Enfin si tu trouve une solution merci de faire suivre car perso j'avais déjà réfléchi à ce pb pour un autre contexte et j'ai rien trouvé de probant :|

Re: Rechercher des "noms approchants" dans une table mySQL

par anne22 » 01 sept. 2010, 14:40

Bonjour,

Merci pour vos remarques.

Doublons : dans mon appli, on crée des événements (consultations). Si on ne trouve aucune personne du même nom déjà dans la base, on crée une nouvelle entrée dans la table "personnes". Mais si on ne fait pas gaffe (erreur de frappe sur le nom le prénom, espace oublié entre, par ex, "Le" et "Grand"), on peut créer une entrée pour cette personne alors qu'elle est déjà venue consulter, et c'est le bazar.

Impossible s'appuyer sur id unique de type sécu, on ne traite absolument pas ce type de données.
Je voulais être un peu plus large que l'égalité stricte nom-prénom-date de naissance pour permettre aux utilisateurs de "se tromper un peu" (ou d'entrer des data qu'on leur a fournies mal orthographiées ou téléphonées, ça arrive) et éviter les ennuis ensuite. Mais ça me semble compliqué, en effet. Le mieux est sans doute d'alerter les utilisateurs qu'il faut faire très attention !

anne22

Re: Rechercher des "noms approchants" dans une table mySQL

par AB » 01 sept. 2010, 00:42

A la saisie d'une nouvelle personne dans la base mySQL, je veux vérifier que la personne en question n'existe pas déjà dans la base, afin d'éviter doublons. Donc je veux rechercher des noms "approchants", et les présenter sous forme de tableau, le cas échéant, pour que l'utilisateur puisse repérer la personne en question.
Oui mais est-ce que tu part sur la bonne méthode ?
Après tout deux personnes différentes peuvent avoir le même nom et prénom. Dans ce cas c'est un identifiant unique qui peut servir pour les distinguer comme une adresse e-mail, ou numéro de sécu.
Et si c'est pour des login qui doivent être différents une recherche stricte est plus appropriée :-k

Re: Rechercher des "noms approchants" dans une table mySQL

par stealth35 » 31 août 2010, 22:47

c'est pas des doublons

Re: Rechercher des "noms approchants" dans une table mySQL

par anne22 » 31 août 2010, 22:16

Oui merci, je viens de tester SOUNDS LIKE.

Mais si on compare de cette façon la chaine saisie "Evin", mysql ne trouve pas de correspondance avec "Evain", par ex. Or c'est le genre d'erreur de frappe qui peut arriver.
Par contre "legrand" est considéré comme approchant de "Le Grand". Bref, pas fiable dans tous les cas.

Finalement, je vais utiliser plusieurs critères dans ma requête sql, quelque chose comme ceci :

Code : Tout sélectionner

// $nom et $prenom contiennent les nouvelles valeurs saisies dans formulaire $query = "SELECT * FROM personnes"; $query .= "WHERE ( LEFT(pers_nom,3) = LEFT('$nom',3) AND LEFT(pers_prenom,3) = LEFT('$prenom',3) )"; // 3 premiers car du nom et du prénom $query .= " OR ( pers_nom LIKE '%$nom%' AND pers_prenom LIKE '%$prenom%' )"; $query .= " OR ('pers_nom' SOUNDS LIKE '$nom%')";
Mais bon, suis pas convaincue du truc. Rien trouvé sur le web, pourtant je ne dois pas être la seule à avoir besoin de ce type de comparaison anti-doublons, si ?

anne22

Re: Rechercher des "noms approchants" dans une table mySQL

par stealth35 » 31 août 2010, 19:34

c'est pas trop évidant ça, ce qui se rapprocherai le plus c'est SOUND LIKE, ou qui joue sur les SOUNDEX, (voir même utiliser direct SOUNDEX)

1 mot = 1 son = 1 code

un code qui serai proche d'un autre, sera une mot qui se rapproche d'un autre

après faut faire la différence entre "doublon" et 'nom approchant"

anne22 c'est pas pareil que anne23

mais si c'est vraiment ce que tu cherches essayes avec les SOUNDEX

Rechercher des "noms approchants" dans une table mySQL

par anne22 » 31 août 2010, 12:27

Bonjour,

Petit souci de conception que je tourne dans ma tête depuis un moment sans solution satisfaisante :

J'ai une base de données où sont associés, en gros, des personnes et des événements (relation 1 --> n).

A la saisie d'une nouvelle personne dans la base mySQL, je veux vérifier que la personne en question n'existe pas déjà dans la base, afin d'éviter doublons. Donc je veux rechercher des noms "approchants", et les présenter sous forme de tableau, le cas échéant, pour que l'utilisateur puisse repérer la personne en question.

Donc, je prévois un script de vérification après saisie du nom et du prénom. Mais je ne sais pas vraiment comment tourner mon affaire : un nom approchant, est-ce un nom dont n% des caractères sont identiques ? Les n premiers du nom et les m premiers du prénom ? Si oui, combien de caractères faut-il comparer ?

Bref : comment procédez-vous pour faire la chasse aux doublons au moment de la saisie de données ? Avez-vous connaissance d'une méthode consacrée en la matière ?
Merci d'avance

anne22