A virtual beer to the man in the corner - worked a treat.  Nice touch  
- a happy customer right before Christmas!!!

Thanks Rudy,

M.

Quoting r937 <rudy...@rogers.com>:

>> Basically the query is sound ...
>
> sorry, no, not quite
>
> here's what i saw...
>
>> WHERE icons.iconId = resourceTypes.resourceTypeIconId
>> AND resources.resourceTypeId = resourceTypes.resourceTypeId
>> AND categories.categoryId = resource2category.categoryId
>> AND resources.resourceId = resource2category.resourceId
>> AND resourceTitle LIKE "%legal%"
>> OR keywords LIKE "%legal%"
>> OR extract LIKE "%legal%"
>> OR resourceTitle LIKE "%waste%"
>> OR keywords LIKE "%waste%"
>> OR extract LIKE "%waste%"
>> AND resourceIsActive = '1'
>
> the problem is that ANDs take precedence over ORs, and you neglected to use
> parentheses to delineate your logical conditions
>
> the above WHERE clause will be executed ~as though~ it had parentheses, like
> this --
>
> WHERE (
>       icons.iconId = resourceTypes.resourceTypeIconId
>   AND resources.resourceTypeId = resourceTypes.resourceTypeId
>   AND categories.categoryId = resource2category.categoryId
>   AND resources.resourceId = resource2category.resourceId
>   AND resourceTitle LIKE "%legal%"
>       )
>    OR keywords LIKE "%legal%"
>    OR extract LIKE "%legal%"
>    OR resourceTitle LIKE "%waste%"
>    OR keywords LIKE "%waste%"
>    OR (
>      extract LIKE "%waste%"
>   AND resourceIsActive = '1'
>       )
>
> notice that the join conditions are all clustered up there with the first
> LIKE
>
> the other LIKEs are by themselves
>
> this means that if, for example, the extract column contains the search
> string, then that row is returned, JOINED TO **ALL** ROWS FROM THE OTHER
> TABLES, completely disregarding the proper join conditions between tables --
> which apply only to the LIKE for the resourceTitle column
>
> you can see the disastrous effect this has by simply removing the DISTINCT
> keyword from the SELECT, which i'm sure you tossed in there just to reduce
> the amount of crap being returned -- icons with unrelated resources,
> resources with unrelated resource types, resource types with unrelated
> categories, resources which aren't active, and so on
>
> there are two solutions
>
> 1. parenthesize your conditions properly
>
> WHERE icons.iconId = resourceTypes.resourceTypeIconId
>   AND resources.resourceTypeId = resourceTypes.resourceTypeId
>   AND categories.categoryId = resource2category.categoryId
>   AND resources.resourceId = resource2category.resourceId
>   AND (
>       resourceTitle LIKE "%legal%"
>    OR keywords LIKE "%legal%"
>    OR extract LIKE "%legal%"
>    OR resourceTitle LIKE "%waste%"
>    OR keywords LIKE "%waste%"
>    OR extract LIKE "%waste%"
>       )
>   AND resourceIsActive = '1'
>
> 2. (preferred) use JOIN syntax
>
> cheryl was trying to say the same thing (although it didn't come across too
> well)
>
> change this --
>
>> FROM resources,
>> icons,
>> resourceTypes,
>> categories,
>> resource2category
>> WHERE icons.iconId = resourceTypes.resourceTypeIconId
>> AND resources.resourceTypeId = resourceTypes.resourceTypeId
>> AND categories.categoryId = resource2category.categoryId
>> AND resources.resourceId = resource2category.resourceId
>
> to this --
>
>  FROM resources
> INNER
>  JOIN resourceTypes
>    ON resourceTypes.resourceTypeId = resources.resourceTypeId
> INNER
>  JOIN icons
>    ON icons.iconId = resourceTypes.resourceTypeIconId
> INNER
>  JOIN resource2category
>    ON resource2category.resourceId = resources.resourceId
> INNER
>  JOIN categories
>    ON categories.categoryId = resource2category.categoryId
>
> then your WHERE clause simplifies to --
>
> WHERE resourceIsActive = '1'
>   AND (
>       resourceTitle LIKE "%legal%"
>    OR keywords LIKE "%legal%"
>    OR extract LIKE "%legal%"
>    OR resourceTitle LIKE "%waste%"
>    OR keywords LIKE "%waste%"
>    OR extract LIKE "%waste%"
>       )
>
> note that you still need parentheses
>
>
> try that without DISTINCT and watch the correct results roll in -- and much
> more quickly, too
>
>
> ;o)
>
>
> ____ � The WDVL Discussion List from WDVL.COM � ____
> To Join wdvltalk, Send An Email To:
> mailto:subscribe-wdvlt...@intm-dl.sparklist.com or
> use the web interface http://e-newsletters.internet.com/discussionlists.html/
>       Send Your Posts To: wdvltalk@lists.wdvl.com
> To change subscription settings, add a password or view the web interface:
> http://intm-dl.sparklist.com/read/?forum=wdvltalk
>
> ________________  http://www.wdvl.com  _______________________
>
> You are currently subscribed to wdvltalk as: matt...@truthisfreedom.org.uk
> To unsubscribe send a blank email to
> leave-50263304-1955138.08b61207e1c4d2c860eb257fdad37...@lists.wdvl.com
> To unsubscribe via postal mail, please contact us at:
> Jupitermedia Corp.
> Attn: Discussion List Management
> 475 Park Avenue South
> New York, NY 10016
>
> Please include the email address which you have been contacted with.



-- 
Matthew Macdonald-Wallace
matt...@truthisfreedom.org.uk
http://www.truthisfreedom.org.uk/

____ � The WDVL Discussion List from WDVL.COM � ____
To Join wdvltalk, Send An Email To: 
mailto:subscribe-wdvlt...@intm-dl.sparklist.com or
use the web interface http://e-newsletters.internet.com/discussionlists.html/
       Send Your Posts To: wdvltalk@lists.wdvl.com
To change subscription settings, add a password or view the web interface:
http://intm-dl.sparklist.com/read/?forum=wdvltalk

________________  http://www.wdvl.com  _______________________

You are currently subscribed to wdvltalk as: arch...@jab.org
To unsubscribe send a blank email to 
leave-50266183-230552.f22dcf5120bad5a91a87f69f1e923...@lists.wdvl.com
To unsubscribe via postal mail, please contact us at:
Jupitermedia Corp.
Attn: Discussion List Management
475 Park Avenue South
New York, NY 10016

Please include the email address which you have been contacted with.

Reply via email to