Ergebnis einer Datenbankabfrage als Matrix formatieren

Hallo zusammen,

ich steh mal wieder vor einem sicherlich kleinen Problem, das für mich derzeit jedoch ein großes darstellt.

Folgender Sachverhalt:
Ich erstelle derzeit eine Bildergalerie mit Datenbankanbindung, welche anschließend 3 Ebenen enthalten soll: Übersicht über alle Alben, (bei Klick auf ein Album gelangt man zur) Übersicht über alle Bilder, (beim Klick auf ein Bild gelangt man zur) Einzelbilddarstellung.

Momentan hapert es bei der Übersicht über alle Bilder. Die Pfade zu den Bildern speichere ich zusammen mit einer ID und diversen Zusatzinfos in der Datenbank ab. Meine Ausgabe erfolgt so:

"SELECT * FROM fotos WHERE album = '$album' ORDER BY id ASC LIMIT 500";

Bisher sieht mein Ergebnis so aus, dass jedes Bild als Thumbnail in einer neuen Zeile dargestellt wird (ja, ich verwende eine Tabelle). Nun würde ich die Ergebnisse jedoch gerne in einer Matrix anzeigen lassen - also bspw. 5 pro Zeile und dann entsprechend viele Zeilen nach unten. Hier verlassen mich sowohl meine DB-Kenntnisse, als auch die Idee nach was ich denn googlen könnte.

Hat da jemand 'ne Idee?

Vielen Dank schonmal vorab :winke:

Na dann gibst du halt zum Start ein öffnendes TR aus;
innerhalb deiner Schleife die Daten in einem TD - bei jedem fünften schliesst du das aktuelle TR, und machst ein neues auf.
Nach der Schleife noch ums schliessen ggf. noch offener TR (und evtl. vorher auch Ergänzung noch “fehlender” TDs) kümmern.

Beim feststellen, dass du bei einem “fünften” Datensatz bist, hilft der Modulo-Operator.

Du zählst mal alle Einträge die dir die DB liefert (mysql_num_rows() bzw. count())
Diese Zahl bearbeitest du mir dem Modulo-Operator (%)
z.B. für 5 Bilder/Zeile: gesamtanzahl%5
Ist das Ergebnis 0, so sind es exakt 5 Zeilen, ansonsten benötigst du mindestens 6

Daraus lässt sich dann schon mal recht gut mit einer(oder mehrerer ineinander verschachtelten) for-Schleife(n) die Tabelle erzeugen.

Vielleicht gibts noch bessere Lösungen, aber so als Ansatz sollte dir das mal weiterhelfen.
Wichtig ist, dass du in der letzen Zeile wirklich alle Tabellenzellen anlegst, auch wenn dafür keine Bilder mehr vorhanden sein sollten.

Der Modulo-Operator liefert mir also nun die Restmenge der Division Gesamtbilder/5 aus. Soweit so gut. Nun weiß ich wieviele Zeilen ich benötige und daraus folglich wieviele Abfragen ich benötige.

Wenn ich jetzt verschiedene Abfragen starten, die mir jeweils die ersten 5 Datensätze ausgeben, die zweiten 5, die dritten 5 etc. klappt es.

Gibt es auch eine einfachere Möglichkeit, bei der nicht dutzende Abfragen hintereinander weg durchgerattert werden müssen?

Ja - Modulo-Operator in Ausgabeschleife auf den Zähler anwenden.

Argh, klar. Dass mir das nicht eingefallen ist…

Danke Euch beiden für die Unterstützung, jetzt funktioniert alles so wie es soll. :wink2:

[quote=“freggle”]z.B. für 5 Bilder/Zeile: gesamtanzahl%5
Ist das Ergebnis 0, so sind es exakt 5 Zeilen, ansonsten benötigst du mindestens 6[/quote]
Dann weiß man nur, dass die Anzahl der Bilder durch 5 Teilbar ist, d.h. jede Zeile enthält Fünf Bilder. Ist es größer als 0, enthält die letzte Zeile den Rest.

im Prinzip:

$zeilen = intval($anzahl / 5); $rest = $anzahl % 5; //wenn größer als 0, dann eine zusätzliche zeile erzeugen.

Edit: oh das problem wurde ja scheinbar schon gelöst. (habs überlesen)

Ich habe es jetzt so gelöst, dass ich mit einer Verschachtlung arbeite.

Zuerst errechne ich mir die Anzahl der Zeilen die ich benötige. Benötige ich bspw. 6 Zeilen läuft die erste Schleife, genau 6 Mal und startet somit 6 Mal die 2. Schleife.
Die 2. Schleife fragt in 5er-Häppchen immer eine ganze Zeile ab und gibt sie aus.