Как предоставить следующую страницу обновленного контента?
Вопрос
Не стесняйтесь редактировать заголовок, если вы знаете, как лучше сформулировать вопрос. (Маркировка также является проблемой.) Проблема может быть слишком сложной в этой общей форме, поэтому давайте рассмотрим конкретный пример.
Вы получаете скрининг вопросов о переполнении стека, запрашивая страницу / questions? sort = newest
. Ссылка на следующую страницу ведет к / questions? Page = 2 & amp; sort = newest
. Я предполагаю, что на стороне сервера запрос переводится в SQL-запрос с предложением LIMIT. Проблема с этим подходом состоит в том, что, если новый вопрос был добавлен, когда пользователь просматривает первую страницу, его вторая страница начнется с некоторых вопросов, которые он уже видел. (Если у него будет 10 вопросов на странице и 10 новых вопросов будут добавлены, он получит точно такой же контент во второй раз!)
Есть ли элегантный способ решить эту распространенную проблему? Я понимаю, что это не такая большая проблема, по крайней мере, не для stackoverflow, но все же.
Лучшая идея (кроме хранения истории запросов для каждого клиента) - использовать формат / questions? answer_id = NNN
. Сервер возвращает страницу, которая начинается с запрошенного ответа, и помещает идентификатор первого ответа на следующей странице в ссылку на следующую страницу. Для этого должен быть способ написания SQL, верно? Р>
Это как обычно? Или есть лучший способ?
Решение
Это не может быть сделано простым способом. Например, "Неотвеченный" список здесь в stackoverflow отсортирован по количеству голосов. Таким образом, если вы сохраните последний идентификатор просматриваемой страницы (в файле cookie, запросе, сеансе, где бы то ни было), и кто-то проголосует за пост, когда вы просматриваете страницу 2, страница 3 не будет заполнена после недавнего голосования. сообщение могло быть перемещено на страницу 1 или 2.
Единственный способ сделать это - загрузить полный список в сеансе Someones. Пожалуйста, не ...
Как уже упоминалось, будем надеяться, что люди уже привыкли к этому.
Другие советы
Большинство веб-сайтов, которые я видел, не решают эту проблему - они показывают вам страницу, содержащую контент, который вы уже видели.
Вы можете подумать, что это особенность - когда вы нажимаете " далее " и увидеть какой-то контент, который вы видели раньше, это сигнал, что вы хотите снова вернуться на передний план, потому что есть какой-то новый контент.
Пометьте каждый вопрос, указав его время в базе данных, перенесите время последней загрузки главной страницы в виде файла cookie или части URL-адреса и ограничьте поиск элементами от n
до n. + displaynum
по мере продвижения вперед.
Но я бы не стал беспокоиться. Такое поведение достаточно равномерно, что большинство пользователей ожидают, и оно служит признаком того, когда новые данные становятся доступными. Вы даже можете открыть новую вкладку / окно, которое начинается в верхней части списка, чтобы увидеть, что появилось.
Я считаю, что SQL (для MySQL) будет:
SELECT *
FROM entries
WHERE entry_id >= @last_viewed_entry_id
ORDER BY entry_id
LIMIT 50