powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
5 сообщений из 5, страница 1 из 1
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
    #39585996
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица данных где выводятся записи по 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
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
    #39586083
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manking,

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

подсчитайте число строк, у которых id меньше (больше) заданного, это и будет порядковый номер записи (если предполагать что у вас сортировка по id, в запросе она не указана). такой вариант с большим числом страниц конечно быстро работать не будет, но там без ухищрений каких-то не обойтись для такой задачи.
А есть примеры запросов?
...
Рейтинг: 0 / 0
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
    #39587227
Silender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
    #39587244
Silender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В обратную сторону:
Код: 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
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти страницу где есть запись при OFFSET и LIMIT (постраничная навигация)?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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