Отображение результата запроса из базы данных в приращениях
-
05-07-2019 - |
Вопрос
Я хочу отобразить список всех пользователей на моем сайте, но я хочу показывать только 10 человек в возрасте. Я не знаю, как именно это сделать. Я знаю, как это сделать, просто отображая всех пользователей на одной странице, но это не очень хорошо, не так ли? Р>
Если я сделаю это с кодом, который у меня есть сейчас, он будет получать только первые десять пользователей снова и снова. Я хочу иметь возможность получить всех пользователей за один раз, сохранить их глобально, а затем перемещаться по списку, получая следующие 10 и так далее для отображения. Р>
Я разрабатываю на appengine с использованием Java и Spring Framework некоторые решения, о которых я думал,
<Ол>Решение
Вообще говоря, вы должны использовать переменную формы на своей странице (через GET или POST) с именем 'page', которая будет числом. Когда вы получите это в сервлете, вы рассчитаете диапазон на основе номера страницы и настроенных строк на странице.
Ознакомьтесь с поиском по большим наборам данных (да, это Python, но применяются те же принципы) и запросы и индексы от Google Документация по App Engine.
Другие советы
Посмотрите на http://valuelist.sourceforge.net/
Если вы сохраняете размер страницы на уровне 10, вы можете получить 10 пользователей для каждой возрастной группы для каждой страницы на основе номера страницы:
SELECT TOP 10 users FROM myusers
WHERE AGE = function(page_number)
ORDER BY some_ordering
Я надеюсь, что JPA + appengine поддерживает такой тип запросов.
Некоторые движки баз данных предоставляют удобные расширения для SQL именно для этой цели. Например, в MySQL вы можете сказать что-то вроде «выбрать ... что угодно ... ограничить 50,10», где «50» строка, с которой нужно начинать, а 10 - количество строк, которые нужно получить. Затем на странице отображения вы просто помещаете кнопки «следующий» и «предыдущий», которые передают соответствующий начальный номер строки обратно на сервер для следующего запуска по запросу.
Если в используемом вами механизме SQL нет такой удобной функции, вам нужно создать специфичный для запроса " где " предложение на основе порядка сортировки.
В качестве простого примера, предположим, что в вашем примере вы отображаете записи по порядку с помощью " имя_пользователя " ;. Вы можете использовать Statement.setMaxRows (10), чтобы ограничить любые запросы до 10 строк. Затем при первом вызове вы выполняете, скажем, " выберите ... что угодно ... из порядка пользователя по имени_пользователя " ;. Сохраните последнее найденное имя пользователя. При следующей кнопке вы передаете это имя_пользователя обратно на сервер, и запрос для следующего вызова «выбрать ... что угодно ... от пользователя, где имя_пользователя > порядок« xxx »по имени_пользователя», где «ххх» последний user_name из предыдущего вызова. Сделайте setMaxRows снова, чтобы вы снова были ограничены 10 строками вывода. Затем вы можете позволить пользователю пройти весь вывод таким образом.
Отпустить пользователя назад - это немного больно. Я сделал это, сохранив таблицу в переменной сеанса со значением начального ключа для каждой страницы.