Ich habe eine SQL-Tabelle mit dem Namen articles
, aus dem ich Reihen von Seiten geladen. My SQL istSQL: Paging ohne Wiederholung von einer dynamischen Tabelle
SELECT ...
ORDER BY $orderCol DESC
LIMIT $offset, $numPerPage
Auf der ersten Seite der Grenze 0, $numPerPage
ist auf Seite zwei, es ist $numPerPage, 2 * $numPerPage
usw.
Das Problem: Wenn eine neue Zeile vor Seite 2 eingesetzt wird geladen, der letzte Artikel von Seite 1 wird der erste Artikel auf Seite 2 usw. sein. Wie kann ich das vermeiden?
Ich dachte über eine WHERE
Klausel, um Artikel beginnend von der letzten $orderCol
, aber dieses Feld ist nicht einzigartig (es ist ein Datum in meinem Fall), so werde ich Artikel mit dem gleichen Wert hier verpassen. Der primäre Index ist auch ein Problem, weil er nicht in der gleichen Reihenfolge angeordnet ist wie $orderCol
Es ist nicht notwendig, dass die neu hinzugefügte Zeile an einem beliebigen Punkt erscheint. Dies erfordert eine Aktualisierung.
Ich denke, der einzige Weg, dies zu vermeiden wäre, die gesamte Ergebnismenge zu cachen, was nicht sehr nett ist. Aber wenn man den Advokaten des Teufels spielt, was ist falsch daran, diesen neuen Rekord auf Seite 2 zu haben? Ich würde es bevorzugen, genaue und aktuelle Informationen in meinen Abfrageergebnissen zu erhalten. –
@TimBiegeleisen Es macht mir nichts aus, wenn der NEW-Eintrag auf Seite 2 erscheint, aber ich möchte den gleichen Eintrag nicht zweimal anzeigen – Dotan
Sie werden den gleichen Eintrag nicht zweimal anzeigen, wenn jede Seite über eine neue Abfrage erfolgt. Ja, das gleiche Objekt scheint "zweimal" zu erscheinen, aber so verhalten sich die meisten Webseiten. Sehen Sie sich einfach die neue Fragenseite von Stack Overflow an. Benutzer sind an dieses Verhalten bereits gewöhnt. –