Graham Anderson <[EMAIL PROTECTED]> wrote on 04/14/2005 11:51:58 AM:

> many thanks
> that was exactly what I needed.....
> 
> Building upon the initial question:
> Is there a way to get Match statements to do partial word 
> searches...like %LIKE% ?
> 
> For example, if the below Match Against query  with 'chris' does not 
> bring up anything...
> AND MATCH (
> media.name, media.product
> )
> AGAINST (
> 'chris'
> )
> 
> Query the database again with 'chris*' ?  Is querying the database(if 
> the first query fails)  twice the best way to do this?
> AND MATCH (
> media.name, media.product
> )
> AGAINST (
> 'chris*'
> )
> 
> 
> Is there a standard way of doing this ?
> 
> thanks Shawn :)
> 
> g
> On Apr 13, 2005, at 11:00 AM, [EMAIL PROTECTED] wrote:
> 
> > Graham Anderson <[EMAIL PROTECTED]> wrote on 04/13/2005 01:46:35 PM:
> >
> >> Hi
> >> I am trying to set up my Match statements to filter the result of the
> >> main query [which works]
> >>
> >> If 'chris' does not exist in the first MATCH statement [AND MATCH
> >> (media.name, media.product)], then the results get a bit screwed up 
:(
> >> If the first match statement finds something, then the query works
> >> fine....
> >>
> >> What would be a better way to structure this...without using a 
> >> subquery
> >> as I am on MYSQL 3.23
> >>
> >>
> >> SELECT media.id, media.product AS product, media.name AS name,
> >> Concat_WS( ' ', artist.fname, artist.lname ) AS artist, mediaType.id 
> >> AS
> >> mediatype, mediaType.name, media.product, media.path
> >> FROM media, artist, mediaType
> >> WHERE media.artist_id = artist.id
> >> AND media.mediaType_id = mediaType.id
> >>
> >> AND MATCH (
> >> media.name, media.product
> >> )
> >> AGAINST (
> >> 'chris'
> >> )
> >> OR MATCH (
> >> artist.fname, artist.lname
> >> )
> >> AGAINST (
> >> 'chris'
> >> )
> >> ORDER BY product, media.name, artist ASC
> >> LIMIT 0 , 30
> >>
> >>
> > it's a parentheses issue. Your query looks like this in the where 
> > clause
> >
> > WHERE artist_ID AND mediaType_ID AND first match OR second match
> >
> > Which gets evaluated like
> >
> > WHERE (artist_ID AND mediaType_ID AND first match) OR second match.
> >
> > Any record that matched your second match condition also satisfied 
your
> > WHERE clause. Because you wanted to match on artist_Id and 
mediaType_ID
> > plus one of the match conditions, you needed to put a set of 
> > parentheses
> > around BOTH of your match conditions so that your WHERE clause looked
> > like:
> >
> > WHERE artist_ID AND mediaType_ID AND (first match OR second match)
> >
> > Here is an updated version of your original query (I also changed your
> > implicit inner joins to explicit ones (it's a pet peeve)):
> >
> > SELECT media.id, media.product AS product
> >         , media.name AS name
> >         , Concat_WS( ' ', artist.fname, artist.lname ) AS artist
> >         , mediaType.id AS mediatype
> >         , mediaType.name
> >         , media.product
> >         , media.path
> > FROM media
> > INNER JOIN mediaType
> >         ON media.mediaType_id = mediaType.id
> > INNER JOIN artist
> >         ON media.artist_id = artist.id
> > WHERE MATCH (media.name, media.product)
> >         AGAINST ('chris')
> > OR MATCH (artist.fname, artist.lname)
> >         AGAINST ('chris')
> > ORDER BY product, media.name, artist ASC
> > LIMIT 0 , 30
> >
> >
> > Shawn Green
> > Database Administrator
> > Unimin Corporation - Spruce Pine
> 
> 


Sorry, according to: 
http://dev.mysql.com/doc/mysql/en/fulltext-restrictions.html full text 
searches are only exact match (with or without case sensitivity).

Reply via email to