2008-09-02 12 views
3

Fühlen Sie sich frei, den Titel zu bearbeiten, wenn Sie wissen, wie Sie die Frage besser formulieren. (Auch das Markieren ist ein Problem.) In dieser allgemeinen Form mag das Problem zu schwierig sein. Betrachten wir ein konkretes Beispiel.Wie kann die nächste Seite mit aktualisierten Inhalten bereitgestellt werden?

Sie erhalten einen Screenshot von Stackoverflow-Fragen, indem Sie /questions ?sort=newest Seite anfordern. Der Link der nächsten Seite führt zu /questions?page=2 &sort=newest. Ich nehme an, dass auf Serverseite die Anfrage in eine SQL-Abfrage mit LIMIT-Klausel übersetzt wird. Ein Problem bei diesem Ansatz besteht darin, dass, wenn eine neue Frage hinzugefügt wird, 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 10 neue Fragen hinzugefügt wurden, erhält er zum zweiten Mal den gleichen Inhalt!)

Gibt es eine elegante Lösung dieses häufigen Problems? Ich stelle fest, dass es kein großes Problem ist, zumindest nicht für Stackoverflow, aber immer noch.

Die beste Idee, die ich habe (abgesehen von der Speicherung der Anfrage Geschichte pro Client) ist /questions?answer_id=NNN Format zu verwenden. Der Server gibt eine Seite zurück, die mit der angeforderten Antwort beginnt, und setzt die ID der ersten Antwort auf der nächsten Seite in die Verknüpfung für die nächste Seite. Es muss eine Möglichkeit geben, SQL dafür zu schreiben, oder?

Ist es wie es normalerweise getan? Oder gibt es einen besseren Weg?

+0

Ich mag Ihre vorgeschlagene Lösung. Ich habe nichts gesehen, um es zu übertreffen (und mir fällt auch nichts Besseres ein). :) Ich werde in der SQL unten gehen. –

Antwort

1

Dies kann nicht auf einfache Weise durchgeführt werden. Zum Beispiel ist die "Unanswered" -Liste hier bei stackoverflow nach Anzahl der Stimmen sortiert. Wenn Sie also die letzte ID der angezeigten Seite speichern (in einem Cookie, einer Anfrage, einer Sitzung, wo auch immer) und jemand einen Post hochlädt, während Sie Seite 2 durchblättern, ist Seite 3 seit der letzten Aktualisierung nicht vollständig Beitrag könnte auf Seite 1 oder 2 verschoben werden.

Nur Möglichkeit, es zu tun, ist die vollständige Liste in einer Sitzung zu laden. Bitte nicht ...

Wie bereits erwähnt, lassen Sie uns hoffen, dass die Leute sich schon daran gewöhnt haben.

+0

stimme völlig zu. Außerdem, wenn Sie so viel ausgeben, ist es besser, mit einem Bericht oder mit besseren Filteroptionen für die Suche zu gehen. Wenn Sie mehr als eine Seite der relevanten Webausgabe haben, benötigt das Layoutdesign wahrscheinlich einen Refactor –

0

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

Sie könnten das als Feature betrachten - wenn Sie auf "next" klicken und einige Inhalte sehen, die Sie zuvor gesehen haben, ist dies ein Signal, dass Sie wieder an die Front zurückkehren möchten, da es neue Inhalte gibt.

0

Tag jede Frage mit seiner Zeit in die Datenbank eingegeben, tragen Sie die Zeit die Frontpage zuletzt als Cookie oder Teil der URL geladen wurde, und beschränken Sie die Suche auf Elemente n durch n+displaynum, wie Sie vorwärts gehen.

Aber ich würde nicht stören. Dieses Verhalten ist einheitlich genug, dass die meisten Benutzer es erwarten, und es dient als ein Flag für wann neue Daten verfügbar werden. Sie können sogar eine neue Registerkarte/ein neues Fenster öffnen, das am Anfang der Liste beginnt, um zu sehen, was passiert ist.

0

glaube ich, die SQL (für MySQL) wäre:

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