UNION statement to sort search results twice

Hi,

I wrote a search script which can search only the page titles and author n=
ames for articles on my site or the titles/authors and the pages' content.

To get the results for the two types in two sets, I used a UNION construct:

if ($search_string) {

my $where_author_title =3D qq{(authors.last_name LIKE '\%$search_string=
\%' OR authors.first_name LIKE '\%$search_string\%' OR pages.title LIKE '\%=
$search_string\%')};

my $where_content =3D qq{MATCH(content) AGAINST ('$search_string' IN BO=
OLEAN MODE)};

my [at] wheres =3D ( $where_author_title );
push [at] wheres, $where_content if $volltext;

my $query =3D join 'UNION', map(qq{(SELECT pages.page_id, pages.title, =
authors.first_name, authors.last_name, pages.visible, pages.user_id FROM pa=
ges JOIN authors USING (author_id) WHERE $_ AND site_id =3D $sitemode ORDER=
BY pages.title)}, [at] wheres);

Later on, I test each row returned by the UNION statement if the $search_st=
ring is either in the title or in the author's name. If not, I print a divi=
ding line and a subheader once.

The result looks ok, something like:

Search results for 'Perl'

Title/author
=2E..
=2E..
=2E..

Content
=2E..
=2E..
=2E..

Now is there a better/more elegant way to do this? I am sure there is, and =
I would be grateful for a pointer.

Thanks,

Jan
--
Hanlon's Razor: Never attribute to malice that which can be adequately expl=
ained by stupidity.

--
MySQL Perl Mailing List
For list archives: http://lists.mysql.com/perl
To unsubscribe: http://lists.mysql.com/perl?unsub=3Dgcdmp-msql-mysql-modules [at] m.gmane.org
Jan Eden [ Fr, 11 Februar 2005 17:19 ] [ ID #638546 ]
Datenbanken » gmane.comp.db.mysql.perl » UNION statement to sort search results twice

Vorheriges Thema: dbd::mysql error
Nächstes Thema: ANN: Gtk2::Ex::DBI-0.7