Как предоставить следующую страницу обновленного контента?

StackOverflow https://stackoverflow.com/questions/38680

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Вы получаете скрининг вопросов о переполнении стека, запрашивая страницу / 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top