2010-10-21 10 views
10

Ich mache einige Paging in meiner Anwendung, 20 Zeilen aus der Datenbank zur gleichen Zeit mit PostgreSQL Standard OFFSET und LIMIT Keywords. Zum Beispiel, Seite 1 Seite zu erhalten:Äquivalent von FOUND_ROWS() -Funktion in Postgresql

SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20 

Es ist eine Anforderung der Anwendung ist, dass wir den Benutzer zeigen auch die Gesamtzahl der Datensätze. Also, natürlich, ich kann die Gesamt erhalten, indem eine separate Abfrage Ausgabe:

SELECT COUNT(*) FROM table WHERE condition 

Aber wenn es eine große Anzahl von Zeilen ist, dann ist dies keine optimale Lösung. Ich stelle fest, dass MySQL eine sehr nützliche Funktion namens FOUND_ROWS hat(), die genau das tut, was ich suche:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows

Gibt es ein Äquivalent in PostgreSQL?

Antwort

24

PostgreSQL window functions für eine Weile hatte jetzt die verwendet werden kann viele Dinge, einschließlich Zählen Reihen zu tun, bevor LIMIT angewendet wird.

Basierend auf dem obigen Beispiel:

SELECT stuff, 
     count(*) OVER() AS total_count 
FROM table 
WHERE condition 
ORDER BY stuff OFFSET 40 LIMIT 20 
Verwandte Themen