3 Stimmen

Wie kann man die nächste Seite mit aktualisierten Inhalten bereitstellen?

Sie können den Titel gerne ändern, wenn Sie wissen, wie Sie die Frage besser formulieren können. (Auch die Kennzeichnung ist ein Problem.) Das Problem könnte in dieser allgemeinen Form zu schwierig sein, also lassen Sie uns ein konkretes Beispiel betrachten.

Sie erhalten einen Bildschirm voller Stackoverflow-Fragen, indem Sie Folgendes anfordern /questions ?sort=newest Seite. Der Link zur nächsten Seite führt zu /questions?page=2 &sort=newest . Ich nehme an, dass die Anfrage serverseitig in eine SQL-Abfrage mit LIMIT-Klausel übersetzt wird. Das Problem bei diesem Ansatz ist, dass, wenn neue Fragen hinzugefügt werden, während der Benutzer die erste Seite durchsucht, seine zweite Seite mit einigen Fragen beginnt, die er bereits gesehen hat. (Wenn er 10 Fragen pro Seite hat und zufällig 10 neue Fragen hinzugefügt werden, erhält er beim zweiten Mal genau denselben Inhalt).

Gibt es einen eleganten Weg, um dieses Problem zu lösen? Mir ist klar, dass es nicht so ein großes Problem ist, zumindest nicht für Stackoverflow, aber trotzdem.

Die beste Idee, die ich habe (abgesehen von der Speicherung des Anfrageverlaufs pro Client), ist die Verwendung von /questions?answer_id=NNN Format. Der Server gibt eine Seite zurück, die mit der angeforderten Antwort beginnt und die Kennung der ersten Antwort auf der nächsten Seite als Link zur nächsten Seite enthält. Es muss doch eine Möglichkeit geben, SQL dafür zu schreiben, oder?

Wird das normalerweise so gemacht? Oder gibt es einen besseren Weg?

1voto

Casper Punkte 1242

Das ist nicht so einfach möglich. Zum Beispiel ist die "Unbeantwortet"-Liste hier bei stackoverflow nach der Anzahl der Stimmen sortiert. Wenn Sie also die letzte ID der Seite, die Sie gerade ansehen, speichern (in einem Cookie, einer Anfrage, einer Sitzung, wo auch immer) und jemand einen Beitrag hochstimmt, während Sie auf Seite 2 sind, ist Seite 3 nicht vollständig, da der kürzlich hochgestimmte Beitrag auf Seite 1 oder 2 verschoben worden sein könnte.

Die einzige Möglichkeit, dies zu tun, ist, die vollständige Liste in eine Sitzung zu laden. Bitte nicht...

Wie bereits erwähnt, hoffen wir, dass sich die Menschen inzwischen daran gewöhnt haben.

0voto

Paul Tomblin Punkte 172816

Die meisten Websites, die ich gesehen habe, lösen dieses Problem nicht - sie zeigen Ihnen eine Seite mit einem Inhalt, den Sie bereits gesehen haben.

Wenn Sie auf "Weiter" klicken und einen Inhalt sehen, den Sie schon einmal gesehen haben, ist das ein Zeichen dafür, dass Sie noch einmal nach vorne gehen wollen, weil es neue Inhalte gibt.

0voto

Kennzeichnen Sie jede Frage mit der in die Datenbank eingegebenen Zeit, tragen Sie die Zeit, zu der die Startseite zuletzt geladen wurde, als Cookie oder Teil der URL mit, und beschränken Sie die Suche auf Elemente n über n+displaynum während Sie vorwärts gehen.

Aber ich würde mir nicht die Mühe machen. Dieses Verhalten ist so einheitlich, dass die meisten Benutzer es erwarten, und es dient als Hinweis, wenn neue Daten verfügbar sind. Sie können sogar eine neue Registerkarte/ein neues Fenster öffnen, das wieder am Anfang der Liste beginnt, um zu sehen, was neu hinzugekommen ist.

0voto

AJ. Punkte 12931

Ich glaube, das SQL (für MySQL) würde lauten:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X