Re: Retrieving result of COUNT(*) with PHP

From: Chris <dmagick(at)gmail(dot)com>
To: Lynna Landstreet <lynna(at)spidersilk(dot)net>
Cc: PgSQL-PHP Mailing List <pgsql-php(at)postgresql(dot)org>
Subject: Re: Retrieving result of COUNT(*) with PHP
Date: 2007-03-29 00:25:33
Message-ID: 460B077D.3090704@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-php


> The code is a bit lengthy because it has to allow for three different search
> modes (any, all and exact phrase). So first I define the first part of the
> search query as:
>
> $searchquery = "SELECT i.image_id, i.title, i.medium, j.artist_id,
> a.firstname, a.lastname
> FROM images i, art_img_join j, artists a
> WHERE (i.image_id = j.image_id
> AND j.artist_id = a.artist_id)
> AND ";
>
> And then depending on what type of search they chose it does any of three
> different things with their search text. In the case of an "any" search (as
> in, any of the words they entered), it does this:
>
> // break into an array of separate words, count them
>
> $searchwords = explode (" ", $searchtext);
> $wordcount = count ($searchwords);
>
> // loop through array adding each word to select
>
> foreach ($searchwords as $key => $word) {
>
> $where_clause .= "i.title ILIKE '%$word%'
> OR i.series ILIKE '%$word%'
> OR i.medium ILIKE '%$word%'";
>
> if (($key + 1) < $wordcount) {
> $where_clause .= " OR ";
> }
> }
>
> And then, for any of the three types, it adds this:
>
> $searchquery .= $where_clause . " ORDER BY lower(i.title)";
>
> That's for the actual search query. Now, the reason I didn't just run the
> query and use pg_num_rows is because the images table has quite a lot of
> records. If someone searches for a fairly common word or phrase, they could
> get 20 pages of results... So I didn't want to put any more stress on the
> database, or slow things down any more, than I had to. Thus, I thought the
> count(*) approach might be more efficient.

Don't do pg_num_rows - it's the wrong approach for this problem.

> So what I did with that was this:
>
> $count_query = "SELECT COUNT(*) AS result_count
> FROM images i, art_img_join j, artists a
> WHERE " . $where_clause;
>
> (I didn't originally have the "AS result_count" in there - I added that when
> I was having trouble extracting the value, hoping that giving it a more
> specific name might help. It didn't.)
>
> $result_count = pg_query($count_query);
>
> $numrows = [any number of things I've tried]

$count_row = pg_fetch_assoc($result_count) or die ('problem: ' .
pg_last_error());
$numrows = $count_row['result_count'];

:D

You can't do it all in one step with pg_fetch_assoc (afaik), but this is
easy enough.

No idea why it's not working with pg_fetch_result but this way does work.

--
Postgresql & php tutorials
http://www.designmagick.com/

In response to

Browse pgsql-php by date

  From Date Subject
Next Message Mihail Mihailov 2007-03-29 09:49:07 Re: Retrieving result of COUNT(*) with PHP
Previous Message Lynna Landstreet 2007-03-29 00:13:01 Re: Retrieving result of COUNT(*) with PHP