Arne: In MySQL den nächsten Datensatz auswählen

Hallo
ich habe eine Kleine Bildgalerie in PHP geschrieben. Nun wollte ich eine funktion ein bauen die das durchschalten durch die bilder ermöglicht.
Meine Bilder sind mit dem Unix Timestamp benannt. Wie ist es nun möglich den jeweils nächsten / vorherigen Namen auszuwählen.

Da ich glaube, dass die BEschreibung so ziemlich schwer zu verstehen ist, hier der Link zu der Page wo ich das einsetzen möchte.
www.abiwards2004.de.vu dort im Bereich "Snapshots".

Wäre für jede Hilfe dankbar !!

Gruß
Arne

  1. Hallo,

    Meine Bilder sind mit dem Unix Timestamp benannt. Wie ist es nun möglich den jeweils nächsten / vorherigen Namen auszuwählen.

    Am besten machst Du eine eigene Spalte mit den
    Timestamps - sei es als Integer oder als MySQL-Timestamp/Datetime.
    Dann musst Du nicht bei jeder Abfrage den Timestamp
    aus den Dateinamen herauslesen.
    (Obwohl das mit den String-Funktionen und AS schon moeglich waere.)

    Vergleiche die Timestamps.

    Der "naechste" ist der kleinste von allen, die einen groesseren
    Timestamp haben.

    SELECT * FROM Tabelle WHERE timestamp>$timestampaktuell
      ORDER BY timestamp ASC

    Der "vordere" ist der groesste von allen, die eine kleineren
    Timestamp haben.

    SELECT * FROM Tabelle WHERE timestamp<$timestampaktuell
      ORDER BY timestamp DESC

    (Code ungetestet.)

    www.abiwards2004.de.vu dort im Bereich "Snapshots".

    => </faq/#Q-19>
    Und gib bitte die direkte, echte URL an, nicht irgend
    so ein peinliches Vanatu-Zeugs.
    Die Seite bringt meinen Opera 5.12/Win zum Flackern,
    habe keine Lust, in weiteren Browsern auszutesten.

    Gruesse,

    Thomas

    1. Hallo,

      Der "naechste" ist der kleinste von allen, die einen groesseren
      Timestamp haben.

      Das setzt voraus, dass die Timestampspalte keine zwei gleichen Werte enthält. Dafür sollte er sorgen. Insbesondere, wenn die Bilder (oder ihre Referenzen) durch ein gemeinsames Query in die DB eingetragen werden, können mehrere Datensätze den selben Timestamp haben. WIr haben ja leider nur Sekundentakt.

      Wenn das nicht sichergestellt ist, würde ich lieber noch ein weiteres Kriterium hinzunehmen.

      Grüße

      Tom

      1. Hi
        schonmal danke für die Hilfe. Glaube ich hab nun eine Idee wie ich das machen kann.

        Es ist übrigens sichergestellt, dass die Bilder einen eindeutigen Namen haben.

        Gruß
        Arne

        1. Hello,

          Es ist übrigens sichergestellt, dass die Bilder einen eindeutigen Namen haben.

          Das ist ja schon einmal eine gute Voraussetzung, um Ordinalität herzustellen. Dir geht es ja um die Sortierfähigkeit, nach welchen Kriterien auch immer.

          Grüße

          Tom

    2. Hi
      hat so bestens gefunzt !!
      Vielen Dank !

      Gruß
      Arne

  2. hi,

    ich habe eine Kleine Bildgalerie in PHP geschrieben. Nun wollte ich eine funktion ein bauen die das durchschalten durch die bilder ermöglicht.
    Meine Bilder sind mit dem Unix Timestamp benannt. Wie ist es nun möglich den jeweils nächsten / vorherigen Namen auszuwählen.

    innerhalb der datenbank haben die datensätze zunächst mal überhaupt keine ordnung. wenn du eine ordnung beim auslesen erzeugen willst, musst du diese explizit herstellen, in dem du ein sortierkriterium definierst.

    für dein vorhaben könnte ich mir als lösung vorstellen, dass du folgendermaßen selektierst:

    • du schränkst per WHERE-klausel die auswahl auf die datensätze ein, deren timestamp-wert grösser bzw. kleiner als der des aktuellen bildes ist (je nach "richtung")
    • du lässt nach dem timestamp absteigend sortieren
    • du beschränkst die ergebnismenge mit LIMIT auf genau einen datensatz

    www.abiwards2004.de.vu dort im Bereich "Snapshots".

    wie machst du hier links? siehe </faq/#Q-19>
    in diesem falle aber auch zwecklos, da ich dort nur eine seite ohne inhalt zu sehen bekomme :-/

    gruss,
    wahsaga