[MySQL] Gallery mit Ordner -> mysql Frage

aargau

Erfahrenes Mitglied
Ich bin dabei mir eine kleine Gallery Klasse zu Programmieren. Dabei wäre meine Idee gewesen das ein User dazu Ordner anlegen kann und die Bilder darin Hochladen kann. Es soll aber auch möglich sein unsortierte Bilder zu haben, diese werden dann einfach auf der Übersichtsseite ohne Ordner angezeigt. Soweit so gut, ich denke mit zwei Querys bzw. insgesammt vier wäre dies Problemlos zu Lösen...

Einfach die Anzahl Ordner sowie die Anzahl Bilder ohne Ordner vom jeweiligen User auslesen und dies dann mal so an die Blätterklasse weitergeben.
Ausgabe der Bilder dann wieder über zwei Querys eine mit allen Ordnern, eine mit den Bilder.

Ich Frage mich allerdings ob ich dies nicht mit zwei Querys lösen könnte. Eine um die Anzahl Elemente zu ermitteln und eine um X Einträge pro Seite an Ordner und Bilder auszugeben. Halt das selbe wie die 1. Query einfach mit Limit...
 
Naja, ich hab jetz ein Lösungsansatz gefunden...
UNION heisst das gute ding wohl, welche es ermöglicht die Tabellen "zusammen zu fassen". Nur habe ich nun so das Problem das ich nicht unterscheiden kann ob es nun ein Ordner oder ein Bild ist. Was habe ich da für möglichkeiten?
Eine Lösung wäre sicherlich einfach eine Spalte mehr anzulegen und diese mit einer 1 oder 0 zu versehen um es so ausfindig zu machen. Aber das würde extra Speicher brauchen und wäre auch nicht ganz so schön. Gibt es da nichts einfachers?

PHP:
SELECT id, name
FROM folder
UNION SELECT id, name
FROM pictures
WHERE folder =0
 
Eine weitere Spalte ist normalerweise die Lösung
SQL:
SELECT
    id, 
    name,
    'folder' AS type
FROM 
    folder
UNION SELECT
    id, 
    name,
    'file' AS type
FROM
    pictures
WHERE
    folder =0

PS: Habs zu den Datenbanken verschoben...
 
Zuletzt bearbeitet von einem Moderator:
Na dann werde ich das wohl so machen müssen. Noch eine Frage, kann ich SQL_CALC_FOUND_ROWS in Verbindung mit UNION nutzen oder müsste ich dann für die Einträge und Anzahleinträge zwei Querys machen?
 
Habe doch noch ein Problem. Die Query soll ja in Verbindung mit einer Blätterfunktion genutz werden. Nur habe ich nun das Problem das ich ja vor dem ich den Limit xx,10 fülle die Blätterfunktionsklasse wissen muss wie viele Einträge das es gibt. Ich könnte natürlich hier einfach die Abfrage abfeuern und danach erst schauen ob es überhaupt so viele Einträge gibt, aber ich bin mir nicht sicher ob dies so optimal wäre. Aber eine zweite Query nur um vorgängig die Anzahl ausfinig zu machen finde ich auch nicht optimal.

Wie macht ihr solche dinge wenn ihr SQL_CALC_FOUND_ROWS nutzt?
 
Hi das mit deiner Union ist etwas ungünstig.

Es wäre vielleicht besser gewesen mit JOIN zu arbeiten. ZB:

Tabelle folder:
id int PK
pId int KEY
name varchar
owner int

Tabelle pictures:
id int PK
folder int FK folder.id
name varchar
owner int

So kannst du die Ordner auch verschachteln, alle Ordner mit pId NULL sind in der Wurzel. Man könnte auch eine individuelle Sortierung dann mit einbringen.

Die Bilder abfragen kannst du dann so:
SQL:
SELECT SQL_CALC_FOUND_ROWS `p`.`name`, `p`.`id`, `f`.`name` AS `folder`
FROM `pictures` AS `p`
JOIN `folder` AS `f` ON `p`.`folder`=`f`.`ìd`
WHERE `f`.`id` = 0
LIMIT 0, 30

So kannst ermittelst du wie viele Einträge es insgesamt wäre ohne LIMIT.
SQL:
SELECT FOUND_ROWS()

Je nach Seite und Ordner passt du dann einfach die LIMIT und WHERE Konditionen an.
 
Zuletzt bearbeitet von einem Moderator:
Zurück