hi,
I have to build a little "search" form.
a visitor enters his/her personal and work data (first name, last name, email, org. name, phones (home phone, work phone, cell) home address, work address) using a form, and then administrator has to compare these data with existing data in database (mysql). if record in database has the same first name as the visitor, the record will get 1 point. if the last name is the same - 3 points. if both names are the same - clearly 4 points. if email matches 7 points, phone number 4 points, etc.

the list to be shown on the screen is list of all records they have at least 1 point. and the list has to be sorted by number of points.

also, matching parts on the list have to be highlighted (with different background color, of the font different color).

I did some testing and the code is really basic, using LIKE, and I'm assuming not so good way. first, I'll get all records from database. while "reading" I compare data from DB with visitor's data. my query (simplified) looks something like this



$query = "
SELECT p.person_id, p.first_name, p.last_name, p.phone as phone_home, p.primary_org, p.address_id, p.email as personal_email, o.full_name, o.organization_id, o.phone as phone_work, o.address_id as org_address, a.address1, a.city, a.state, a.zip, a.county
       FROM people p
LEFT JOIN organization o ON (o.instance=".$_SESSION['instance']." AND o.organization_id=p.organization_id) LEFT JOIN addresses a ON (a.entity_id=o.organization_id AND a.instance=".$_SESSION['instance'].")
       WHERE p.instance_id=".$_SESSION['instance']."
           AND m.instance_id=".$_SESSION['instance']."
           AND p.person_id = ".$_SESSION['person_id']."
           AND o.active='Y'
           AND (
p.last_name LIKE '%".mysql_real_escape_string($person['last_name'])."%' OR o.email_address = '".mysql_real_escape_string($person['email_address'])."' OR p.email = '".mysql_real_escape_string($person['email'])."'
                  ";
if (!empty($phone_home))
{
   $query .= "
               OR p.phone = '".$person['phone']."'";
}
if (!empty($person['phone']))
{
   $query .= "
               OR o.phone = '".$person['phone']."'";
}
if (!empty($person['org_name']))
{
   $query .= "
OR o.full_name LIKE '%".mysql_real_escape_string($person['org_name'])."%'";
}

$query .= "
               )
       ORDER BY p.last_name ASC, p.first_name ASC ";


$myquery = mysql_query($query);
while($result = mysql_fetch_array($myquery))
{
# I compare record with visitor's data and assign points to $RANK[$result['person_id']] # if there is at least one "match" assign the record to an array $RECORDS['person_id']
}

then sort $RANK desc and then list sorted array $RANK on screen with matching $RECORDS elements.

It works but it could take 10-15 seconds to create the list if database has e.g. 10,000 records


anybody had the same or similar project? I'll appreciate any suggestion. how to setup database (mysql) and the best way to do the search code (php).

thanks for any help.



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to