2009-04-21 2 views
-1

Я использую рамки Struts 2, но этот вопрос касается не только Struts 2.Pagination с завихрением

Я пытаюсь иметь какую-то разбивку на страницы на своем веб-сайте. Предположим, у меня есть список записей, которые я хочу показать на странице. В списке 150 записей, но я хочу показать 50 на каждой странице, поэтому в этом случае будет 3 страницы. Конечно, список будет извлечен из БД.

Извините, что у нас есть ограничение, если запрос занимает более 7 секунд, он получает убитый (не спрашивайте). Поэтому, если мы получаем 150 записей, в то же время наш запрос занимает более 7 секунд. Поэтому мы решили получить 50 записей каждый раз. Таким образом, в этом случае мы перейдем к БД 3 раза (50 50 50). В первый раз мы получим общее количество (150), поэтому мы знаем, сколько раз мы должны вернуться к БД.

Можете ли вы поделиться своими мыслями о том, как вы справляетесь с чем-то подобным? Я знаю, что некоторые из вас могут сказать, что настройка хранимой процедуры или запроса - лучшая ставка, но это будет болезненный путь, так как у нас есть множество SP и запросов.

Буду признателен за любые примеры.

ответ

0

Вы просто ищете общие советы о том, как обращаться с поисковой системой? Вы на правильном пути, думая, что вы должны захватить только записи, которые вам нужны из базы данных, чтобы сохранить запросы маленькими.

Различные РСУБД имеют разные подходы к перечислению и записи подкачки. Для этого MySQL имеет ключевое слово LIMIT, MS SQL Server 2005 и имеют функцию ROW_NUMBER(), а Oracle имеет специальный столбец ROWNUM. В зависимости от вашей РСУБД, вы должны легко найти примеры использования этих функций.

1

Вам не нужно делать фактический выбор в первый раз, вы можете получить только счетчик (запрос функции агрегата). Прямой список с разбивкой по страницам обычно используется в очень больших наборах данных, единственная проблема заключается в том, что нет гарантии состояния страницы. то есть записи могут быть вставлены в порядке на предыдущей странице, таким образом, нажав более старую запись на вашей новой странице, и наоборот. В целом это приемлемо для этого.

0

Пример запрос для пагинации таким образом, что вы получите только ограниченное количество записей: -

select * from records limit $start,50 

Здесь я предположил, что исходный запрос был выбрать * из записей. Просто добавьте исходный запрос с «limit $ start, 50». Здесь, когда вы хотите, чтобы первые 50 записей начинались, должно быть равно 0, чтобы получить 50-100 записей, начало должно быть равным 50, а для 100-150 записей должно быть равно 100. Добавляя «limit $ start, 50» к любому запроса, запрос принимает 50 записей, начиная с номера записи $ start. Надеюсь, это решит вашу проблему разбивки на страницы.

Смежные вопросы