Michael Schröpl: Nächsten Datensatz auf Inhalt eines Feldes überprüfen

Beitrag lesen

Hi Christian,

Gibt es da einen Befehl, der zum nächsten Datensatz in der
erstellten Query $tmp springt?
Den könnte ich dann doch bestimmt irgendwie als Link
angeben, oder?

Deine Denkweise ist nicht kompatibel zu derjenigen Deiner Problem-Architektur. ;-)

Aus Deiner obigen Beschreibung schließe ich, daß Du via HTTP im Wesentlichen zwischen den verschiedenen Treffern einer Abfrage blättern willst - richtig?

Du gehst dabei implizit davon aus, daß irgendwer sich nach dem Klicken auf besagten Link noch an das Ergebnis einer vorherigen Datenbankabfrage erinnern würde.

Genau das ist aber das Problem. Wer sollte das sein?
Dein vorheriger Prozeß (egal ob CGI oder PHP oder ...) hat eine Abfrage gegen die Datenbank geworfen und ein Ergebnis zurück bekommen, dieses als HTML-Seite an einen Browser gesendet und sich danach beendet.
Niemand weiß mehr, was der genau getan hat - insbesondere die Datenbank nicht, welche in der Zwischenzeit einen Haufen anderer Anforderungen bekommen hat und eine beliebige weitere Anforderung nicht mehr als der vorherigen zugehörig erkennen kann (keine etablierte Session).

Alles, was der nächste Datenbankzugriff tun kann, ist, wieder eine neue Anforderung (im Wesentlichen dieselbe wie zuvor) zu stellen - wobei er (mit Hilfe des Query-Strings des URLs in dem von Dir erwähnten Link) immerhin die Chance hat, eine gegenüber der vorherigen Anforderung _abweichende_ Anfrage zu verursachen.
Du kannst also dadurch blättern, daß Du jedesmal _alle_ in Frage kommenden Datensätze aus der Datenbank abfragst, von diesen aber nur den <n>-ten Datensatz wirklich abgreifst (LIMIT-Klausel).
Und die Position des gewünschten Datensatzes kannst Du (als jeweils um 1 erhöhten Zahlenwert) jeweils in den Query-String der URL desjenigen Links eintragen, den Du bei der Anzeige einer vorherigen Seite mit einblendest. Vorwärts- und Rückwärtsblättern unterscheiden sich dabei genau um ein Vorzeichen. (Sonderbehandlung am Anfang - leicht - und Ende der Liste - etwas schwerer - nicht vergessen!)

Blättern über die ID geht deshalb nicht os einfach, weil Du sämtliche (!) Seiten ja so generieren müßtest, daß jeweils die ID der nachfolgenden Seite in dem Link eingetragen ist - und wer soll sich diese IDs in der Zwischenzeit wo merken?
Du kannst alternativ sowohl die Daten der angezeigten Seite als auch diejenigen der Nachfolgeseite bei jeder Query anfordern, dann kannst Du immerhin den Nachfolge-Link generieren - das bedeutet aber nur, daß Du diese Daten zweimal abholen mußt (sowohl bei der Anzeige des Vorgängers als auch bei der Anzeige der Seite selbst), während das bei meiner skizzierten Lösung nur einmal erforderlich ist.
Alternative: Du fügst in jeden Datensatz die ID des Vorgängers bzw. Nachfolgers als zusätzliche Spalte ein, d. h. Du gibst das Konzept einer Menge auf und konstruierst eine verkettete Liste - mit allen Nachteilen, die das bezüglich Einfügen, Löschen und sortierter Gesamt-Ausgabe im Vergleich zu einer Menge hat.

Viele Grüße
      Michael