Hi,

2006/6/28, Chris Sansom <[EMAIL PROTECTED]>:
I'm sure this is an elementary problem, but I can't get my head round it.

I have two tables: pix and sections, the relevant bits of which are:

pix (2,421 rows):
picid       varchar(7)             not null
sectionid   smallint(5) unsigned   not null
caption     text                   null
    picid and sectionid are a joint primary key
    caption is full text indexed

sections (a mere 152 rows):
sectionid   smallint(5) unsigned   not null
title       varchar(63)            not null
blurb       text                   null
    sectionid is primary key (auto increment)
    title and blurb are full text indexed

In pix, there may well be several instances of the same picid, but
always with a different sectionid (obviously).

The trouble is, this was originally set up with no intention of
actually searching the tables, but now I want to. And I want to find
the first instance of each picid that matches the text anywhere in
caption, title or blurb, and get some other info at the same time.
Oh, and for the time being it needs to be possible in MySQL 3.23.x.

So far I'm doing a very simple:

SELECT DISTINCT picid
FROM pix AS p
INNER JOIN sections AS s ON p.sectionid = s.sectionid
WHERE caption LIKE '%searchterm%' OR title LIKE '%searchterm%'
    OR blurb LIKE '%searchterm%'
ORDER BY picid

then as I loop through the results I'm more or less repeating the
process to get the other information:

SELECT p.sectionid, caption, title
FROM pix AS p
INNER JOIN sections AS s ON p.sectionid = s.sectionid
WHERE (caption LIKE '%searchterm%' OR title LIKE '%searchterm%'
    OR blurb LIKE '%searchterm%') AND p.picid = 'picid'
LIMIT 1

If you know the picid previously retrieved, then the clause (caption
LIKE '%searchterm%' OR title LIKE '%searchterm%' OR blurb LIKE
'%searchterm%') is redundant, isn't it ?

--
http://www.w-fenec.org/

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to