Primus: [SQL] Nächsten und vorherigen Datensatz abfragen

Hallo,

ich möchte eine Blätterfunktion für eine Tabelle programmieren. Für das Vor- und Zurückblättern möchte ich Links erstellen, die die Seite mit den Parametern des entweder nächsten oder vorherigen Datensatzes der Tabelle aufrufen.

Kann irgendwie mit SQL die ID des Vorherigen oder nächsten Datensatzes von einem Datensatz aus einer Tabelle abgefragt werden? Wenn ja, wie?

Oder ist es vielleicht sinnvoll/möglich, das Result-Set der Abfrage in einer Sessionvariable zu speichern, um dann mit PHP-Funktionen durch das Abfrageergebnis zu navigieren. Ich habe allerdings gerade keine Funktionen gefunden, außer der Funktion mysql_data_seek, mit der man den Datenzeiger bewegen kann. Bietet da PHP wirklich nichts?

Danke für jede Hilfe!

MfG
Primus

  1. echo $begrüßung;

    ich möchte eine Blätterfunktion für eine Tabelle programmieren. Für das Vor- und Zurückblättern möchte ich Links erstellen, die die Seite mit den Parametern des entweder nächsten oder vorherigen Datensatzes der Tabelle aufrufen.

    Kann irgendwie mit SQL die ID des Vorherigen oder nächsten Datensatzes von einem Datensatz aus einer Tabelle abgefragt werden?

    Ich würde nicht die ID nehmen sondern mit der LIMIT-Klausel die darzustellenden Teile aus der Ergebnismenge extrahieren.

    Wieviele Datensätze in der Ergebnismenge vor dem LIMITieren enthalten sind, kann man übrigens mit FOUND_ROWS() ermitteln.

    echo "$verabschiedung $name";

  2. yo,

    um das gesagte von dedlfix zu ergänzen. eine tabelle ist eine unsortierte menge. die ID dafür zu benutzen, um eine sortierung mit ORDER BY reinzubekommen, ist eine denkbar schlechte lösung. je nachdem welche reihenfolge du haben willst, solltst du eine seperate spalte dafür verwenden, wie zum beispiel ein datumswert.

    die kombination mit ORDER BY und LIMIT ist sehr leistungsfähig, nur noch die richtige spalte(n) in der ORDER BY klausel auswählen.

    Ilja

  3. Hallo,

    könnt ihr eure Vorschläge vielleicht noch ein bisschen präzisieren? Ich verstehe nicht, wie ich mit LIMIT das Problem lösen soll. Vielleicht kann ja jemand direkt die SQL-Anweisung posten!?

    MfG
    Primus

    1. echo $begrüßung;

      könnt ihr eure Vorschläge vielleicht noch ein bisschen präzisieren? Ich verstehe nicht, wie ich mit LIMIT das Problem lösen soll. Vielleicht kann ja jemand direkt die SQL-Anweisung posten!?

      Es kommt nicht auf den konkreten Wert eines Primärschlüssels an, um vorhergehende und nachfolgende Datensätze zu finden.

      Gib einfach das Statement so an, dass alle gewünschten Datensätze in einer definierten Reihenfolge ausgegeben werden

      SELECT ... FROM ... WHERE ... ORDER BY ...

      Dann fügst du die Beschränkung mit LIMIT hinzu. LIMIT wählt aus der Ergebnismenge einige Datensätze anhand ihrer Position in dieser Ergebnismenge aus.

      Bei 5 Datensätzen pro Seite wird deine erste Seite die Ergebnis-Datensätze von Position 1 bis 5 anzeigen, Seite 2 zeigt 6 bis 10 an, usw. Du errechnest also anhand der Seitennummer die Limit-Werte.
      SQL_CALC_FOUND_ROWS und SELECT FOUND_ROWS() benötigst du in dem Zusammenhang zum Ermitteln der Anzahl der Datensätze der unlimitierten Ergebnismenge, damit du z.B. die Nummer der letzten Seite berechnen kannst.

      Das gleiche Prinzip kannst du natürlich auch für nur einen Datensatz pro Seite verwenden.

      echo "$verabschiedung $name";