Hi Dedlfix,
vorab: bei dem Beispiel handelte es sich logischerweise um eine quick and dirty Loesung.
In meiner Applikation nutze ich ein Framework, einen Persistence-Layer, MVC-Pattern und das eigentliche SQL-Statement (um welches es mir in diesem Thread geht) laesst sich auf zwei ganze DIN-A 4-Seiten ausdrucken.
(Einen Teil davon habe ich mit Hilfe von einigen Leuten hier erstellt)
Ich habe den Anwendungsfall jetzt mal separat gekapselt. Hierbei kreise ich jedoch permanent um das gleiche Problem, und zwar dass mir der aktuelle Zeiger* nicht bekannt ist, und ich somit nicht den korrekten Nachfolger und Vorgaenger ermitteln kann.
Der muss dir aber bekannt sein, sonst könntest du den zum Zeiger gehörenden Datensatz gar nicht bestimmen. Das kannst du aber - anhand der ID. Die muss dein Zeiger-Kriterium sein. Mehrfach vorkommende Werte sind dafür nicht geeignet.
Da waeren wir doch schon bei dem Problem. Klar ist mit der Zeiger auf das Item bekannt. Aber nicht der Zeiger auf die Position im Resultset. Und letzteres ist ja das, was mir derzeit meine Sorgen bereitet.
Im jetzigen Fall zeigst du, dass du die ID für den Detaildatensatz verwendest, im vorangegangenen Verlauf des Threads sprachst du von benutzerfreundlichen URLs.
Siehe quick and dirty.
In meiner Appliation ist die eindeutigkeit wie folgt gegeben:
<group>/<region>/<province>/<city>/<name>
Pro <city> kann es nur ein <name> geben.
Ich weiß nicht, welche Bedeutung die Spalte position hat, aber als Auswahlkriterium ist sie unbrauchbar, weil sie keinen eindeutigen Inhalt hat. Wenn du ein zweites Kriterium hast, durch das die Wahl eindeutig wird, dann musst du auch immer dieses zur Auswahl hinzuziehen und an den Übergabestellen von position in andere Programmteile mit anführen.
Sie hat keine Bedeutung. Siehe quick and dirty ;-)
Die Eindeutigkeit liegt einzig und allein in dem PK. Aber nach diesem wird ja nicht gesucht, statt dessen wird zb eben nach der Position sortiert.
Ist GET['did'] gesetzt, so versucht das Program den Vorgaenger und den Nachgaenger zu ermitteln (links in der Tabelle gibt es Links hierfuer).
Damit hast du ein eindeutiges Kriterium, das muss dein Zeiger sein. Denn darüber bestimmst du ja auch den anzuzeigenden Detail-Datensatz. Und zusammen mit der Sortierung ergeben sich die Vorgänger und Nachfolger.
Und exakt hier liegt der Hund begraben. Lediglich anhand der Sortierung plus der ID ist es nicht moeglich zum vorherigen oder naechsten Datensatz zu gelangen. Denn angenommen, es wurde nach der Position sortiert und auf der Ergebnisseite werden 10 Items dargestellt. Wovon die ersten fuenf die gleiche Position besitzen. Klickt der Benutzer jetzt auf den Eintrag in der Mitte, so kann ich auf der Detailseite die vordere und naechste Position nicht ermitteln. Denn dort weiss ich ja nicht, dass das Item (auf der aktuellen Detailseite) in der Mitte der Ergebnisliste stand.
Der Rest sind allgemeine Hinweise zum Code:
Siehe oben.
Der Code diente einzig und allein dazu das Problem zu schildern. Und diesen Zweck hat er auch erfuellt.
Wie ich deinen Antworten nun entnehmen kann, bist du dir auch keiner Loesung bewusst? Es kann aber auch gut sein, dass ich dich missverstanden habe.
Besten Dank Dedlfix,
Peter