Gallery: voriges und nächstes Bild anzeigen?

hoktar

Mitglied
Hallo,
ich hab grade folgendes Problem:
Ich programmier mir grade eine Fotogallery (php...) und will, dass wenn man ein Bild öffnet, einem auch das vorige und nächste aus dem Album angezeigt in dem sich das geöffnete Bild befindet.
Ich bekomm dazu aber einfach keine vernünftige query hin.

Wie kann ich das vorige und nächste Bild ermitteln, (muss nicht reines SQL sein, ganz egal)?

Meine T_GALLERY schaut folgendermaßen aus:

G_ID | G_ALBUM | G_BESCHREIBUNG | .........................

Anhand der ID mit einfach ID-1 bzw. ID+1 gehts nicht weil die ID ja fortlaufen ist und über das jeweilige Album hinweg geht.
Außerdem soll man auch Datensätze also Bilder löschen können und dann fehlt ja eine ID..
 
Zuletzt bearbeitet:
Schematisch sieht die Abfrage wie folgt aus:
Code:
-- erster nachfolgender Datensatz
SELECT <ID>
FROM <Tabelle>
WHERE <ID> > <aktuelle ID>;
-- erster vorhergehender Datensatz
SELECT <ID>
FROM <Tabele>
WHERE <ID> < <aktuelle ID>;
Falls die Abfragen keinen Datensatz liefern, hast du das jeweilige Ende erreicht.
 
Hmmmm doch nicht so einfach wie erhofft, die Sache hat einen Haken:

Angenommen ich hab folgende Datensätze:

ID | ALBUM
8 winter
9 sommer
10 sommer
11 winter
12 herbst
13 herbst
14 herbst
15 herbst
16 sommer
17 winter

und ich möchte das bild mit der ID 16.
Dann sollten die nachbarbilder im album sommer 10 | 16 | (ende) sein.
Das kommt aber nicht raus, klar, weil er nimmt ja den ERSTEN Datensatz wo das Argument (dass die ID kleiner als 16 sein muss) zutrifft, und das ist der 9er, und nicht der 10er.

Ist das verständlich? ;)
 
Zuletzt bearbeitet:
Dann schränke die Ergebnismenge einfach weiter ein:
Code:
-- erster nachfolgender Datensatz desselben Albums
SELECT ID
FROM <Tabelle>
WHERE ID > <aktuelle ID> AND ALBUM = <aktuelles Album>;
-- erster vorhergehender Datensatz desselben Albums
SELECT ID
FROM <Tabele>
WHERE ID < <aktuelle ID> AND ALBUM = <aktuelles Album>;
 
Ja das hab ich sowieso schon gemacht, aber das ändert ja nichts daran, dass innerhalb des Albums das erste Ergebnis wenn er seine Abfrage startet, der 9er Datensatz ist. weißt du was ich mein?

Er weiß, ich will ein Bild das eine kleinere ID hat als mein 16er Bild.
Er fängt also bei m ersten Datensatz an (in dem fall 8.) und sucht und wird gleich fündig beim 9er. tada, es ist kleiner als das 16er. passt also!
Ich wollte aber das 10er bild, weil das das nächste zum 16er ist, nicht das 9er. Das Problem ist also einfach, dass er von Vorne beginnt.

In die Andere Richtung funktioniert das Schema nämlich:
Angenommen ich will das 10er Bild öffnen.
Dann geht er von vorne durch, alles kleiner... geht weiter, und kommt zwangsläufig irgendwann zum ersten bild nach dem 10er, das größer als das 10 ist. also 16.
Passt, wunderbar.

Man müsste also eigentlich für das vorige Bild die Abfrage einfach nur von hinten beginnen lassen und es würde funktionieren!
Geht das irgendwie?
 
Zuletzt bearbeitet:
Hm, das versteh ich grad nicht ;)
Was meinst du mit "Vermutlich ist <aktuelle ID> = 0 oder ein ähnlicher Wert."?
<aktuelle ID> ist einfach immer die ID von dem Bild das gerade geöffnet ist.

Kann man nicht einfach sagen, dass der Compiler die Tabelle einfach von hinten zu lesen beginnen soll statt von vorne?
 
Zuletzt bearbeitet:
Zurück