Как предоставить следующую страницу обновленного контента? - PullRequest
3 голосов
/ 02 сентября 2008

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

Вы получаете скриншот вопросов переполнения стека, запрашивая страницу /questions ?sort=newest. Ссылка на следующую страницу ведет к /questions?page=2 &sort=newest. Я предполагаю, что на стороне сервера запрос переводится в SQL-запрос с предложением LIMIT. Проблема с этим подходом состоит в том, что если новый вопрос был добавлен, когда пользователь просматривает первую страницу, его вторая страница начнется с некоторых вопросов, которые он уже видел. (Если у него есть 10 вопросов на страницу и 10 новых вопросов добавлено, он получит точно такой же контент во второй раз!)

Есть ли элегантный способ решить эту распространенную проблему? Я понимаю, что это не такая большая проблема, по крайней мере, не для stackoverflow, но все же.

Лучшая идея (кроме хранения истории запросов для каждого клиента) - использовать формат /questions?answer_id=NNN. Сервер возвращает страницу, которая начинается с запрошенного ответа, и помещает идентификатор первого ответа на следующей странице в ссылку на следующую страницу. Для этого должен быть способ написания SQL, верно?

Это как обычно это делается? Или есть лучший способ?

Ответы [ 4 ]

1 голос
/ 30 сентября 2008

Это не может быть сделано простым способом. Например, список «Без ответа» здесь в stackoverflow отсортирован по количеству голосов. Таким образом, если вы сохраните последний идентификатор просматриваемой страницы (в файле cookie, запросе, сеансе, где бы то ни было), и кто-то проголосует за пост, когда вы просматриваете страницу 2, страница 3 не будет заполнена после недавнего голосования сообщение могло быть перемещено на страницу 1 или 2.

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

Как уже упоминалось, будем надеяться, что люди уже привыкли к этому.

0 голосов
/ 02 сентября 2008

Пометьте каждый вопрос по времени, введенному в базу данных, перенесите время последней загрузки главной страницы как файл cookie или часть URL-адреса и ограничьте поиск элементами с n по n+displaynum по мере продвижения вперед.

Но я бы не стал беспокоиться. Такое поведение достаточно равномерно, что большинство пользователей ожидают, и оно служит признаком того, когда новые данные становятся доступными. Вы даже можете открыть новую вкладку / окно, которое начинается в верхней части списка, чтобы увидеть, что появилось.

0 голосов
/ 30 сентября 2008

Я считаю, что SQL (для MySQL) будет:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
0 голосов
/ 02 сентября 2008

Большинство веб-сайтов, которые я видел, не решают эту проблему - они показывают вам страницу, содержащую контент, который вы уже видели.

Вы можете подумать, что это особенность - когда вы нажимаете «далее» и видите какой-то контент, который вы видели раньше, это сигнал о том, что вы хотите вернуться назад, потому что есть какой-то новый контент.

...