Вам нужно отсортировать на сервере.
Тогда вы можете либо:
отправка полного набора результатов клиенту и обработка нумерации страниц на стороне клиента . Проблема в том, что набор результатов может быть большим для извлечения из базы данных и отправки клиенту.
обрабатывать нумерацию страниц на стороне сервера . Клиент и сервер запрашивают только одну страницу за один раз из БД. Проблема в том, что вы будете снова и снова заказывать одни и те же данные для извлечения страницы 1, страницы 2 и т. Д. Каждый раз, когда вы запрашиваете у БД конкретную страницу. Это может быть проблемой с большой базой данных.
имеют компромисс между обоими (для большой базы данных):
- Установить ограничение, скажем, 300 единиц
- Сервер запрашивает у БД первые 301 элемент в соответствии с порядком по
- Сервер хранит набор результатов (до 301 элемента) в кэше
- Клиент запрашивает у сервера страницу за страницей
- Сервер обрабатывает нумерацию страниц, используя кеш
- Если имеется 301 элемент, клиент отображает «Список совпадений содержит более 300 элементов. Он был усечен».
Примечание 1: Обычно клиенту все равно, не сможет ли он перейти на последнюю страницу. Вы можете улучшить решение, чтобы сначала подсчитать общее количество строк (к тому времени нет необходимости в порядке), чтобы вы могли отображать сообщения, которые лучше для пользователя, например, «Результат содержал 2023 элемента, можно просмотреть только первые 300».
Примечание 2: если вы запрашиваете данные постранично в базе данных без использования какого-либо критерия порядка, большинство дБ (по крайней мере, Oracle) не гарантирует любой порядок. Таким образом, у вас может быть один и тот же элемент на страницах 1 и 2, если вы делаете два запроса к базе данных. Та же проблема возникает, если несколько товаров имеют одинаковое значение, используемое для заказа (например, на одну и ту же дату). БД не гарантирует никакого упорядочения между элементами с одинаковым значением. Если это так, то я бы предложил использовать PK в качестве критерия последнего заказа для упорядочения (например, ORDER BY date, PK
), чтобы пейджинг выполнялся согласованным образом.
Примечание 3: я говорю о клиенте и сервере, но вы можете адаптировать идею к вашей конкретной ситуации.