Работа с нумерацией на основе нумерации страниц - PullRequest
0 голосов
/ 31 января 2019

При использовании на основе значений нумерация страниц

select * from articles 
where id > @start_value 
limit @page_size

как рассчитать @start_value , учитывая только номер страницы ?

А именно: скажемУ меня был веб-сайт и HTML-страница со списком статей, которые мне нужно было разбить на страницы.Но даже для рендеринга самой первой страницы мне нужно как-то вычислить @start_value.Вводом пользователя будет номер страницы, по которой он щелкнул;для самой первой страницы это будет 1 - по умолчанию.

  • с учетом этого 1, как бы я вычислил @start_value?

  • или с учетом любой случайной страницы, тем не менее, как бы я вычислил @start_value?

Обратите внимание, что значения столбца id таблицы не обязательно являются последовательными, даже если id автоинкремментирован.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вам не нужна часть "where id> ...".Правильный способ достижения этого - использовать конструкцию limit @page_size offset @offset.Таким образом, вам не нужно беспокоиться о пробелах.Чтобы рассчитать смещение на основе номера страницы, вам просто нужно умножить page_size * page_number.Еще одна важная вещь заключается в том, что вы должны заказывать свои регистры, если вы хотите, чтобы всегда был один и тот же результат.Если вы не доверяете идентификаторам, вы можете заказать по дате или в другом поле.Итак:

select * from articles
order by date
limit @page_size
offset (@page_size * (@page_num-1))

Примечание: я использовал (@ page_num-1), чтобы начать со смещения 0 для страницы 1.

0 голосов
/ 31 января 2019

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

Вам также потребуется знать размер страницы, чтобы вычислить начальное значение, но с учетом @page_num и @page_size: @start_value рассчитывается как @start_value = @page_num * @page_size;.

Здесь оно без предложения where и с limit / offset вместо

    select * 
    from articles
    order by id
    limit @page_size
    offset (@page_size * @page_num)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...