Добавить в корзинуПозвонить
Найти в Дзене
Работяги

Что такое пагинация?

Всем привет! Сегодня разберемся с вопросом пагинации. Поговорим какие бывают подходы и выделим плюсы и минусы каждого. Начнем с того, что мы хотим сделать. Допустим, у нас есть сайт блога, где публикуются статьи пользователей. К данному моменту у нас набралось уже 1000 статей и реализован функционал просмотра и сортировкой этого списка. Как можно заметить нет никакого смысла показывать все публикации, которые у нас есть. Во-первых, человеку это просто не нужно, так как он физически не может просмотреть их все сразу. Во-вторых, системе тоже нет смысла выгружать все записи, так как это несет накладные расходы. Решение: Отдавать публикации порциями. То есть наша цель - взять из базы 10 записей с учетом того, на какой странице находится пользователь. Например, если пользователь находится на второй странице списка, мы должны пропустить (page-1)*количество записей на странице. Разберем как это можно сделать с помощью sql, чтобы не привязываться к технологиям и языку, на котором Вы хотите это

Всем привет! Сегодня разберемся с вопросом пагинации. Поговорим какие бывают подходы и выделим плюсы и минусы каждого.

Начнем с того, что мы хотим сделать.

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

Решение: Отдавать публикации порциями. То есть наша цель - взять из базы 10 записей с учетом того, на какой странице находится пользователь. Например, если пользователь находится на второй странице списка, мы должны пропустить (page-1)*количество записей на странице.

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

Первый способ - Limit/Offset:

Конструкция limit позволяет взять определенное количество записей. Пример запроса:

-2

Супер! Мы вывели только 10 записей, уже можно отдать первую страницу пользователю. Теперь давайте сымитируем ситуацию,

когда пользователь находится на второй странице. С этим нам поможет вторая конструкция offset. Она позволяет пропустить указанное количество элементов. Пример запроса:

-3

Отлично! Это очень простой механизм, но не будем забывать про сортировку. Сейчас у нас все элементы отсортированы по id.

В данном примере нам ничего не мешает использовать конструкцию order by, чтобы ****выбрать любой столбец для сортировки.

Второй способ - where + индексированный столбец + limit:

Здесь логика очень проста - мы указываем id > «количество записей, которые мы должны пропустить». Пример запроса:

-4

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

То есть для нас в столбце id(это может быть любой проиндексированный столбец) значения должны идти по порядку.

Третий способ - cursor:

Такой способ хорош для реализации бесконечного списка. Большой недостаток такого способа заключается в отдельном соединении с сервером и транзакцей через HTTP-клиент. Пример запроса:

-5

Курсоры имеют желаемое свойство консистентности пагинации на любых запросах и показывают результаты, существующие в базе на момент начала транзакции.


Ссылки на наши ресурсы – ниже:

https://t.me/podcust_rabot9g

https://www.youtube.com/@Rabot9gi

https://vk.com/club224443714