Страница результатов в [база данных на ваш выбор] - PullRequest
0 голосов
/ 26 мая 2009

Я бы хотел собрать "современные" способы разбивки результатов по страницам для любой базы данных в этой вики.

Ввод: у меня огромная таблица PAGE_ME:

create table PAGE_ME (
    ID bigint not null,
    NAME varchar(32) not null,
    CREATED TIMESTAMP not null
)

id не обязательно в том же порядке, что и created. Я хочу отображать результаты между 5. May 2008 09:03:01 и 3. Aug 2008 11:00:01, 20 за один раз, упорядоченные по времени, по возрастанию (сначала 5 мая). Запрос должен вернуть NAME и CREATED (плюс все, что вам нужно, чтобы разбить результат на страницы), поэтому внутренний запрос:

select NAME, CREATED
from PAGE_ME
where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01'
order by CREATED asc

На клавишах готово ... Иди! ;)

Ответы [ 2 ]

1 голос
/ 26 мая 2009

В Oracle общее решение:

select NAME, CREATED
from
( select NAME, CREATED, ROWNUM rn
  from
  ( select NAME, CREATED
    from PAGE_ME
    where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01'
    order by CREATED asc
  )
  where ROWNUM <= :max_row
)
where rn >= :min_row

Здесь: min_row и: max_row определяют границы текущей страницы, например, 1 и 10, 11 и 20, ...

1 голос
/ 26 мая 2009

Прочтите пейджинговые запросы из моей статьи здесь и для sql сервера здесь . Все запросы предназначены для работы с любыми запросами, которые вы им задаете, поэтому никаких хитростей, которые работают только в некоторых ситуациях.

...