Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)? / 5 сообщений из 5, страница 1 из 1
17.01.2018, 17:42
    #39585996
manking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
Есть таблица данных где выводятся записи по 10 строк на страницу (постраничная навигация). Нужно, зная id конкретной записи, узнать на какой странице находится эта запись. и запросить её. То есть какой OFFSET выставить чтобы эта запись точно попала в запрос.

Код: sql
1.
2.
// При таком запросе получаю записи со смещением. Это страница 3
SELECT id,name FROM table1 ORDER BY DESC OFFSET 20 LIMIT 10


Вот как узнать номер страницы или смещения OFFSET для id=17 где в запрос попадёт эта запись с id 17?
...
Рейтинг: 0 / 0
17.01.2018, 21:25
    #39586083
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
manking,

подсчитайте число строк, у которых id меньше (больше) заданного, это и будет порядковый номер записи (если предполагать что у вас сортировка по id, в запросе она не указана). такой вариант с большим числом страниц конечно быстро работать не будет, но там без ухищрений каких-то не обойтись для такой задачи.
...
Рейтинг: 0 / 0
18.01.2018, 10:41
    #39586280
manking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
Alexiusmanking,

подсчитайте число строк, у которых id меньше (больше) заданного, это и будет порядковый номер записи (если предполагать что у вас сортировка по id, в запросе она не указана). такой вариант с большим числом страниц конечно быстро работать не будет, но там без ухищрений каких-то не обойтись для такой задачи.
А есть примеры запросов?
...
Рейтинг: 0 / 0
19.01.2018, 16:36
    #39587227
Silender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select id, name, page 
from table1 t, (
  select page, min(id) over (partition by page order by page desc) from (
    select id, (row_number() over(order by id)) / 10 as page
    from table1 where id<=3005
  ) z limit 1) z
where id>=min 
limit 10;
...
Рейтинг: 0 / 0
19.01.2018, 16:53
    #39587244
Silender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
В обратную сторону:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select id, name, page 
from table1 t, (
  select page, max(id) over (partition by page order by page desc) from (
    select id, (row_number() over(order by id desc)) / 10 as page
    from table1 where id>=17
  ) z limit 1) z
where id<=max 
order by id desc
limit 10



По произвольному полю (например name):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with tt as (
  select id, (row_number() over(order by name desc)) / 10 as page
  from table1
) select t.id, t.name, tt.page 
  from table1 t
  join tt on t.id=tt.id and tt.page=(select page from tt where id=17)
order by name desc
limit 10



При сортировке не по id на больших таблицах будут тормоза. Лучше будет разбить на 2 запроса.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]