Hinweis: Du musst Dich registrieren wenn Du einen Beitrag verfassen willst.
Zum registrieren, klicke hier. Die Registrierung ist kostenlos.


Zitat-Antwort erstellen
Benutzername:
Passwort:
Antwort: Hilfe zum Editor

 
Deine Signatur aus deinem Profil einfügen.
(Email Benachrichtigung, wenn auf das Thema geantwortet wird) (Hilfe)
 
T H E M A     R Ü C K B L I C K
Nicore
Hauptthema:
Da ich nach langer Zeit mal wieder ein PHP Problem
habe und mein Hauptforum www.spotlight.de seit einiger
Zeit dicht ist wie ich eben gesehen habe versuche ich
es mal hier. :/



Hänge gerade fest mit meiner Bildergalerie.

Habe eine Bilder Datenbank wo aus verschiedenen Berichten
jeweils Bilder drin sind.

Natürlich mit einer auto_increment "IDnr" und dazu noch
eine "BerichtID".

In dem jeweiligen Bericht lasse ich dann zwei Links für
"ZURÜCK" und "WEITER" anzeigen. Vorher hole ich mir mir den
kleinsten und größten Wert damit der Link "ZURÜCK" bei
Bild 1 nicht zu sehen ist und "WEITER" beim letzten Bild
nicht zu sehen ist.

SELECT MAX(IDnr) as IDnr FROM berichtebilder WHERE BerichtID = '".$berichtidnr."'"
SELECT MIN(IDnr) as IDnr FROM berichtebilder WHERE BerichtID = '".$berichtidnr."'"

Das eigentliche Bild usw. hole ich mir so:
SELECT * FROM berichtebilder WHERE BerichtID = '".$berichtidnr."' AND IDnr = '".$nextpic."'

Für die Anzeige der Bilder nehme ich den Wert von "MIN" als
Startbild und dann kann man sich halt durchklicken. Für das
nächste Bild rechne ich zur Zeit: $nextpic = IDnr + 1
Oder für das vorherige Bild eben: $nextpic = IDnr - 1

Nun kann es aber sein, dass einige User via CMS ein paar
Bilder löschen und somit ist der Wert "IDnr" unterbrochen.
In meinem aktuellen Fall fehlen 5 Bilder und die "IDnr" geht
von 77 auf 82. Durch meine obige Rechnung geht der Klick auf
"WEITER" bei Bild 77 auf 78 natürlich ins Leere und es wird
kein Bild angezeigt.

Was kann ich tun um automatisch von 77 auf 82 zu springen?
Kann ich das irgendwie in meiner SQL-Anweisung unterbringen
oder muss ich das in Schleifen durchgehen? Hatte schon die
Idee das mit "file_exists" zu überprüfen aber das klappte
lediglich sofern nur eine IDnr fehlt und ich es einfach mit
der nächsten IDnr probiere. Aber da hier 5 Bilder in Reihe
fehlen bleibt er da wieder hängen. Komme hier absolut nicht
weiter. :/

Hier ist der aktuelle Stand live zu sehen: *klick*
Nicore
Habs hinbekommen, wer mal selbiges Problem hat kann sich
an mich wenden. :)
mahe
Warum postest nicht gleich die Lösung? :P

Also ich hätts so gemacht:
WHERE `IDnr`>$aktuelle_id ORDER BY `IDnr` DESC LIMIT 0,1
bzw.
WHERE `IDnr`<$aktuelle_id ORDER BY `IDnr` ASC LIMIT 0,1

btw.:

Wenn du das ganze Query unter " hast brauchst du bei einer Variable nicht ".$foobar." screiben.
Da die Vars unter " sowieso geparsed werden.
Bei ' siehts anders aus, da geht PHP davon aus dass es sich um einen String handelt und parsed die Vars darin nicht.
Tabellen und Spaltennamen würde ich unter ` schreiben, dann kanns nicht zu Probs kommen mit reservierten Wörtern :)
Nicore
Ist teilweise noch Angewohnheit die doppelten
Anführungszeichen, dadurch erkennt der Parser
auch die Variablen und hebt sie farblich heraus,
ist eine kleine Hilfe beim Schripten. ;)

Die Lösung ist so wie Du geschrieben hast,
nur eben "<=" bzw. ">=" weil er sonst einen
überspringt.
Aber warum kam Deine Antwort nicht schon vorher?!? ;)
Und ich durchsuch das ganze Web und finde die
Lösung nirgends obwohl einige Leute das gleiche
Problem hatten und die Foren voll davon waren,
aber keiner wusste Antwort. Bis ich mir dann nochmal
die grundlegenden SQL-Funktionen angeschaut habe
und rausfand, das man im SQL Aufruf selber mathematisch
direkt vergleichen kann... das wusste ich nicht! O.o
mahe
Ist aber langsamer ;)
(ok, das merkt man erst im großen Rahmen)

Den einen Überspringt er nur wenn du nicht mit der aktuellen ID arbeitest sondern mit denen wo du eins abgezogen bzw. dazugezählt hast :)

Leider muss ich für mein Geld was arbeiten, sonst hätt ich schon früher geantworter ;P

MySQL kann sehr viel, ich beschäftige mich (privat) mit dem Thema schon mehrere Jahre und komm immer wieder auf neue Sachen drauf.
Nicore
Zitat:


Den einen Überspringt er nur wenn du nicht mit der aktuellen ID arbeitest sondern mit denen wo du eins abgezogen bzw. dazugezählt hast :)
(Zitat von: mahe)




Stimmt, intern rechne ich mit der aktuellen ID +1 oder -1
aber nur wenn eine gewisse "action" = "up" oder "down" ist.
Diese Variable brauche ich für die Anzeige und falls mal
jemand mitten in einem Bild einsteigt ohne eine "action".
Hatte da einige Variante durchgespielt und nur die reine
ID des aktuellen Bildes lieferte mir nicht alle nötigen
Funktionen. :)
mahe
Anhand der ID des aktuellen Bildes kannst du dir doch mit einem SQL-Query die ID (und die anderen Daten) des Bildes davor bzw. danach holen.
Und verlinken tust doch mit der ID des Bildes das angezeigt werden soll, oder nicht?
Nicore
Die aktuelle ID hole ich mir Anhand der Einstiegsseite
mit MIN damit das erste Bild in der variierenden Reihenfolge
angezeigt wird und danach geht es eben mit "up" oder "down"
zum nächsten oder vorherigen Bild. Grundlage sind eben diese
beiden Eigenschaften ob ich von der aktuellen ID eins abziehe
oder addiere.

Insgesamt definiere ich 4 SQL Abfragen per IF-Abfrage, je nachdem
an welcher Stelle ich stehe, wo und wie man in die Galerie einsteigt
und was die vorherige "action" war.