Разбивка на страницы: узнайте, на какой странице находится элемент (с учетом первичного ключа и порядка сортировки)

Допустим, я выполняю разбиение на страницы следующим образом:

SELECT article_id, 
       article_content 
FROM articles 
ORDER BY article_rating 
OFFSET (page - 1) * items_per_page 
LIMIT items_per_page;

У меня индекс выше (article_rating, article_id) .

Мой вопрос: что такое наиболее эффективный способ узнать, на какой странице находится статья, если я

a) знаю article_id

b) знаю, что сортировка ORDER BY article_rating?

Она должна быть эффективной, потому что я будет очень часто выполнять этот тип запроса.

Было бы даже лучше, если бы он выдавал не только номер страницы, но и все статьи на этой странице.

Так, например, если все статьи отсортированы по их рейтинг и каждые десять из них помещены на разные страницы, я хочу выяснить, на какой странице находится статья с ID 839.

Я использую PostgreSQL 8.4 (при необходимости я готов обновить его).

Спасибо!

РЕДАКТИРОВАТЬ:

Как указано в комментариях ниже, мой запрос, вероятно, должен выглядеть так:

SELECT article_id, 
       article_content 
FROM articles 
ORDER BY article_rating,
         article_id
OFFSET (page - 1) * items_per_page 
LIMIT items_per_page;
6
задан unicornop 6 June 2011 в 14:49
поделиться