Ich bin auf der Suche nach dem besten Weg, um die nächsten und vorherigen Aufzeichnungen eines Datensatzes zurück, ohne eine vollständige Abfrage ausgeführt wird. Ich habe eine vollständig implementierte Lösung an Ort und Stelle, und würde gerne wissen, ob es eine bessere Ansätze sind dies dort tun werden.
Lassen Sie sich sagen, dass wir eine Website für einen fiktiven Gemüsehändler bauen. Neben seiner HTML-Seiten, jede Woche, will er eine Liste von Sonderangeboten auf seiner Website veröffentlichen. Er will, dass diese Angebote in einer aktuellen Datenbank-Tabelle befindet, und die Benutzer müssen in der Lage, die Angebote auf drei Arten zu sortieren.
Jeder Einzelteil hat auch mit mehr, textlichen Informationen über das Angebot und „Zurück“ und „Weiter“ , um eine Detailseite haben. Die „Zurück“ und „next“ Tasten müssen die benachbarten Einträge hinweisen , in Abhängigkeit von der Sortier der Benutzer für die Liste gewählt hatte .
Alt-Text http://www.pekkagaiser.com/stuff/Sort.gif?
Offensichtlich ist die Schaltfläche „Weiter“ für „Tomaten, Klasse I“ hat „Äpfel, Klasse 1“ im ersten Beispiel, „Birnen, Klasse I“ in den zweiten, und keiner in den dritten sein.
Die Aufgabe in der Detailansicht ist , die nächsten und vorherigen Elemente zu bestimmen , ohne eine Abfrage jedes Mal ausgeführt wird , mit der Sortierreihenfolge der Liste als die einzige verfügbare Informationen (Lassen Sie uns sagen wir , dass durch einen GET - Parameter erhalten ?sort=offeroftheweek_price, und die Auswirkungen auf die Sicherheit ignorieren) .
Offensichtlich einfach vorbei die IDs der nächsten und vorherigen Elemente als Parameter ist die erste Lösung, die den Sinn kommt. Schließlich wissen wir bereits die ID des an dieser Stelle. Aber dies ist keine Option hier - es wäre in diesem vereinfachten Beispiel arbeiten, aber nicht in vielen meinen realen Anwendungsfall Welt.
Mein aktueller Ansatz in meinem CMS ist mit etwas , das ich genannt habe „Sortier - Cache“. Wenn eine Liste geladen wird, speichere ich die Artikelpositionen in Datensätzen in einer benannten Tabelle sortingcache.
name (VARCHAR) items (TEXT)
offeroftheweek_unsorted Lettuce; Tomatoes; Apples I; Apples II; Pears
offeroftheweek_price Tomatoes;Pears;Apples I; Apples II; Lettuce
offeroftheweek_class_asc Apples II;Lettuce;Apples;Pears;Tomatoes
offensichtlich, das itemsist Spalte tatsächlich mit numerischen IDs gefüllt.
In der Detailseite, greife ich jetzt den entsprechenden sortingcacheDatensatz, holt die itemsSpalt, explodieren sie, für die aktuelle Artikel - ID suchen, und den vorherigen und nächsten Nachbarn zurückzukehren.
array(current => Tomatoes,
next => Pears,
previous => null
);
Das ist natürlich teuer, arbeitet für eine begrenzte Anzahl von Datensatz nur und schafft redundante Daten, aber sie , dass in der realen Welt übernehmen, die Abfrage die Listen zu erstellen ist sehr teuer (es ist), ist es in jeder Detailansicht läuft aus die Frage, und einige Caching benötigt.
Meine Fragen:
Glauben Sie, das ist eine gute Praxis ist die benachbarte Datensätze für verschiedene Abfrage Aufträge, um herauszufinden?
Wissen Sie, bessere Praktiken in Bezug auf Leistung und Einfachheit? Wissen Sie etwas, das diese völlig veraltet macht?
Bei der Programmierung der Theorie ist es ein Name für dieses Problem?
Ist der Name „Sortierung Cache“ ist angemessen und verständlich für diese Technik?
Gibt es anerkannt, gemeinsame Muster, dieses Problem zu lösen? Wie werden sie genannt?
Hinweis: Meine Frage geht es nicht um den Aufbau der Liste, oder wie in der Detailansicht angezeigt werden soll . Das sind nur Beispiele. Meine Frage ist die grundlegende Funktionalität der Nachbarn eines Datensatzes festzustellen , wann eine erneute Abfrage nicht möglich ist, und die schnellste und billigste Weg , um dorthin zu gelangen.
Wenn etwas unklar ist, lassen Sie einen Kommentar und ich werde klären.
Starten einer Prämie - vielleicht gibt es ein paar mehr Infos zu diesem Thema gibt.














