2010-10-21 5 views
10

Я использую пейджинг в своем приложении, возвращая 20 строк из базы данных за один раз, используя стандартные слова OFFSET и LIMIT для PostgreSQL. Например, чтобы получить страница 1 страница:Эквивалент функции FOUND_ROWS() в Postgresql

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

Это требование приложения, которое мы также показать пользователю общее количество записей. Таким образом, очевидно, что я могу получить в общей сложности с выдачей отдельного запроса:

SELECT COUNT(*) FROM table WHERE condition 

Но если есть большое количество строк, то это не является оптимальным решением. Я заметил, что MySQL имеет очень полезную функцию под названием FOUND_ROWS(), что делает именно то, что я ищу:

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

Есть ли эквивалент в PostgreSQL?

ответ

24

PostgreSQL был window functions некоторое время теперь, который может быть использован, чтобы сделать много вещей, в том числе подсчета строк до применения LIMIT.

Основываясь на приведенном выше примере:

SELECT stuff, 
     count(*) OVER() AS total_count 
FROM table 
WHERE condition 
ORDER BY stuff OFFSET 40 LIMIT 20 
Смежные вопросы