2010-10-21 14 views
10

Sto facendo un po 'di paging nella mia applicazione, restituendo 20 righe dal database alla volta usando le parole chiave OFFSET e LIMIT standard di PostgreSQL. Per esempio, per ottenere la pagina 1 pagina:Equivalente della funzione FOUND_ROWS() in Postgresql

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

Si tratta di un requisito dell'applicazione che mostriamo anche per l'utente il numero totale di record. Così, ovviamente, posso ottenere il totale mediante una query separata:

SELECT COUNT(*) FROM table WHERE condition 

Ma se ci sono un gran numero di righe, allora questa non è una soluzione ottimale. Ho notato che MySQL ha una funzione molto utile chiamato FOUND_ROWS() che fa esattamente quello che sto cercando:

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

Esiste un equivalente in PostgreSQL?

risposta

24

PostgreSQL ha avuto window functions per un po 'di tempo che può essere usato per fare molte cose tra le righe di conteggio prima di applicare LIMIT.

Sulla base dell'esempio di cui sopra:

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