You are here: Re: [PHP] Search Agents... « PHP « IT news, forums, messages
Re: [PHP] Search Agents...

Posted by Richard Lynch on 04/29/05 03:12

On Thu, April 28, 2005 3:17 pm, Nick Zukin said:
> I have a request from a client that has me a little confounded. He wants
> to
> have a system where when someone posts a public request with certain
> criteria, that criteria is then used to find established profiles/agents
> that fit the criteria. Then emails are sent out to the people
> corresponding
> to those profiles/agents.
>
> An example:
>
> Someone posts an ad saying they have a car for sale:
>
> MODEL: Chevy
> MAKE: Silverado
> YEAR: 2005
>
> Meanwhile, potential clients have saved search agents so that when a car
> is
> posted if the description meets their criteria they are sent an email.
> Thus,
> you could have three people, each with agents such as these:
>
> PERSON1
> MODEL: Chevy
> MAKE: Silverado
> YEAR (Newer than): 2003
>
> PERSON2
> MODEL: Chevy
> MAKE: Any
> YEAR (Newer than): 2004
>
> PERSON3
> MODEL: Any
> MAKE: Any
> YEAR (Newer than): 2000
>
> You would like all of these people to be emailed after the ad is posted,
> but
> how? This won't work:
>
> SELECT * FROM agents WHERE mymodel = "Chevy" AND mymake = "Silverado" AND
> myyear <= 2005

But this will:

WHERE (mymodel = 'Chevy' OR mymodel = 'Any')
AND (mymake = 'Silverado' OR mymake = 'Any')
AND (myyear <= 2005 OR myyear IS NULL)

You probably should use NULL to represent 'Any' and just use IS NULL in
all three.

> It will limit the results too much. But neither will this:
>
> SELECT * FROM agents WHERE mymodel = "Chevy" OR mymake = "Silverado" OR
> myyear <= 2005
>
> That will give too many results. If you had a profile such as:
>
> PERSON4
> MODEL: Chevy
> MAKE: Corvette
> YEAR (Newer than): 2003
>
> They would be sent the email, too. But they aren't looking for trucks.

This, at least, is clearly addressed by the above.

I can't guarantee it will address *EVERY* profile -- Only time and
practice will tell you that.

> Two options I see would be to:
>
> 1) Do it in reverse. Each time a new ad is posted to then loop through
> the
> agents doing a search for the criteria and limiting the search to only the
> previously posted ad, such as:
>
> SELECT * FROM ads WHERE admodel = "Chevy" AND admake = "Silverado" AND
> adyear >= 2003 AND adid = 8

This won't work any better if the ad doesn't bother to list Make or Year
or...

Plus, you haven't really addressed the issue of somebody who wants a Chevy
(no make specified) newer than 2003.

> 2) Create some crazily complex query with nested ands and ors out the
> wazoo.

I wouldn't say my query was crazily complex...

But if it is, then so be it.

> Is there something I'm not seeing? Is there a better way? If not, which
> of
> these seems like less of a strain on the server?

Create keys on all the search columns.

--
Like Music?
http://l-i-e.com/artists.htm

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация