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

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

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

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

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

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

Мне нравится ваше предложенное решение. Я не видел ничего, что могло бы превзойти его (и я не могу придумать ничего лучше). :) Я попробую SQL ниже.

AJ. 30.09.2008 19:57
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
1
298
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

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

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
Ответ принят как подходящий

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

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

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

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

Lorenzo Boccaccia 30.09.2008 21:24

Другие вопросы по теме