[thelist] mysql select query

Means, Eric D eric.d.means at boeing.com
Thu Apr 4 09:24:01 CST 2002


> um, let's say that i've just got one table (which i have) and
> that there
> are a lot of different story categories (which are defined by
> name rather
> than number) and that there are only a couple of categories
> from which i
> want to exclude the archived stories... which is right?

Technically they're all equivalent.

(1) uses php-style variables; you'd pass in the text for the two categories
you want to return only live stories as $SectionID and $SectionID2.  It
otherwise is basically identical to (2) (but note that (2) should probably
say "and ((not section = 'news' and not section = 'feature') or..." instead
of the simplified form.
(3) uses "not in" instead of "not x and not y"; it's a little more succint,
but IN may not be supported on mySQL, now that I think about it.  It's also
a little easier to add future categories to (just add a comma followed by
the category name, instead of "and not section = 'whatever'").

They should all work more or less equally well.

<references>
1)
SELECT * FROM $db.$table WHERE ((SectionID = $SectionID AND Live = 1) OR
(Section ID = $SectionID2 AND Live = 1)) AND Published = 1 ORDER BY
RAND() LIMIT 3

2)
where published is not null and ((not news and not feature) or live is not
null)

3)
select * from stories
where published is not null
and (storytype not in ('news', 'feature') or live is not null)
order by random limit 3
</references>



More information about the thelist mailing list