Re: Re: find (matching) person in other table

From: Date: Wed, 30 May 2007 21:01:46 +0000
Subject: Re: Re: find (matching) person in other table
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-255874@lists.php.net to get a copy of this message
Jared Farrish wrote:
I was thinking to assign points (percentage) to matching fields (last name, first name, email, phone, city, zip, phone) and then list people with more than 50%. e.g., if first and last name match - 75%, if only email match - 85%, if first name, last name and email match - 100%, if last name and phone match - 50%... etc. does anybody have any experience with such a problem? or something
similar? Although you should be able to do this with you SELECT (I guess, never have), since you posted this to a PHP mailing, you get a PHP answer! Look up Levinshtein in the php manual and start from there: http://us2.php.net/manual/en/function.levenshtein.php If you can do this on SELECT (using the db engine), I would suggest that, as that way you don't have to return a giant list to poke through. You can also use wildcards, and only select matches that have the first three characters: $lastname = strpos('Rogers',0,2); $firstname = strpos('Timothy',0,2); $select = "SELECT uid,LastName,FirstName
               FROM users
               WHERE LastName='$lastname%'
               AND FirstName='$firstname%'";
I haven't tested that, but I think it would work. You would need to work on a way to LIMIT the matches effectively. If that doesn't work, hey, this is a PHP list... yes. in one hand it's more for mysql list. though, I was thinking more if somebody had already something similar as a "project". more as path I have to follow.
e.g., in your example, in where clause AND doesn't work because bob could be robert too, right? and last name has to match 100%, right? (or I'm wrong?) how "smart" solution will be something like this: $query = my_query("select id from members where last_name='$last_name'"); while($result = mysql_fetch_array($query)) { $MEMBERS[$result['id']] += 50; } $query = my_query("select id from members where first_name='$first_name'"); while($result = mysql_fetch_array($query)) { $MEMBERS[$result['id']] += 10; } $query = my_query("select id from members where email='$email'"); while($result = mysql_fetch_array($query)) { $MEMBERS[$result['id']] += 85; } etc. after last query I will have an array of people. and I'll list all person with "score" more than 50. or, since last name MUST match, I think it's better this way (just got in my head): $query = my_query("select id from members where last_name='$last_name'"); while($result = mysql_fetch_array($query)) { $query = my_query("select id from members where first_name='$first_name'"); while($result = mysql_fetch_array($query)) {
       $MEMBERS[$result['id']] += 10;
} $query = my_query("select id from members where email='$email'"); while($result = mysql_fetch_array($query)) {
       $MEMBERS[$result['id']] += 85;
} etc. }

« previous php.general (#255874) next »