| From: | "Josh Berkus" <josh(at)agliodbs(dot)com> |
|---|---|
| To: | Charles Hauser <chauser(at)acpub(dot)duke(dot)edu> |
| Cc: | pgsql-sql(at)postgresql(dot)org |
| Subject: | Re: psql: question |
| Date: | 2002-05-08 15:23:32 |
| Message-ID: | web-1453665@davinci.ethosmedia.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
Chuck,
Please cc: one of the Postgres lists when you query me. If you're
getting Q&A support just from me, I'll have to start charging you!
> Trying to work out details of how to let users page back and forth
> among a multi-page list of results.
>
> Problem: I need to know the total number of tuples the query would
> return in order to decide if there are more to display.
>
> 1) Use CURSOR and FETCH
>
> $res= $con->exec(
> "BEGIN WORK;
> DECLARE gene_result CURSOR FOR
> SELECT blah blah
> ORDER BY blah;
> FETCH $offset IN gene_result
> ");
>
> $result->ntuple: returns only the number set by $offset, not TOTAL
> for query.
>
> 2) use LIMIT OFFSET
>
> same problem,
> $result->ntuple: returns only the number set by LIMIT, OFFSET, not
> TOTAL for query.
>
> So there has to be a way to glean both the TOTAL and the SUBSET
> returned?
>
> Searching the postgresql archives obviously can deal with this
> http://archives.postgresql.org/pgsql-sql/
> 'Displaying documents 11-20 of total 243 found.'
Personally, I don't know any way to do this without running the query
twice.
Least inefficient approach: If your interface allows seperating the
SELECT clause from the rest of the query, then run first:
SELECT COUNT(*)
FROM rest-of-query ...
Check that value. If it's 0, then return a "no records found" message
to the user. Otherwise, run the query broken into LIMIT and OFFSET
blocks.
More inefficient approach: if the way the query is being generated
does not allow you to break off the SELECT clause, then you need to
subselect a count:
SELECT COUNT(*) FROM (
SELECT blah FROM rest_of_query) query_count;
This will also give you a count, buut be slightly slower than the
above.
If anybody knows a way to get a count *without* running the query
twice, I'd be glad to hear it!
-Josh Berkus
| From | Date | Subject | |
|---|---|---|---|
| Next Message | mlw | 2002-05-08 16:00:18 | Re: postgresql 7.1 file descriptor |
| Previous Message | Charles Hauser | 2002-05-08 15:16:51 | CURSOR/FETCH vs LIMIT/OFFSET |