- D r u c k a n s i c h t -
>> Originalansicht HIER <<
Beitrag von: Nicore Date: 26.06.2008 Thema: Brauch mal bitte PHP / SQL Hilfe :( ---------------------------------------------------------- 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* BMW Team Oberhavel |
Autor: Nicore Datum: 04.07.2008 Antwort: ---------------------------------------------------------- Habs hinbekommen, wer mal selbiges Problem hat kann sich an mich wenden. :) BMW Team Oberhavel |
Autor: mahe Datum: 04.07.2008 Antwort: ---------------------------------------------------------- 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 :) Greetz mahe |
Autor: Nicore Datum: 04.07.2008 Antwort: ---------------------------------------------------------- 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 BMW Team Oberhavel |
Autor: mahe Datum: 04.07.2008 Antwort: ---------------------------------------------------------- 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. Greetz mahe |
Autor: Nicore Datum: 07.07.2008 Antwort: ---------------------------------------------------------- Zitat: 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. :) BMW Team Oberhavel |
Autor: mahe Datum: 07.07.2008 Antwort: ---------------------------------------------------------- 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? Greetz mahe |
Autor: Nicore Datum: 07.07.2008 Antwort: ---------------------------------------------------------- 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. BMW Team Oberhavel |
Partner: Auto Tuning Videos und Filme | BMW Treffen Event Syndikat RaceWars | Internet Design T-Shirts Aufkleber | Kfz Werkstatt Reparatur Tüv und Tuning | BMW Auspuff E46 M3 4-Rohr Duplex - BMW Carbonteile |