Sql Abfrage mit join

MsvP@habdichliebhasi

Erfahrenes Mitglied
Hallo zusammen,

stehe gerade etwas auf dem Schlauch - vielleicht liegt es auch an der Uhrzeit. ;)

Ich habe drei Tabellen:

1.: Alben
2.: Bilder
3.: Alben und Bilder

In der 3. Tabelle speichere ich, welche Bilder in welchem Album sind, und an welcher Stelle diese stehen bzw. wie diese innerhalb des Albums sortiert sind (pos).

Jetzt will ich alle Alben eines Users anzeigen lassen, und immer das erste und das letzte Bild anzeigen pro Album.

Also z.B. Album 1 hat 5 Bilder. Dann soll er mir Album 1 anzeigen mit den Bildern 1 und 5.

Ich habe es mit group und min / max probiert. Aber irgendwie werden mir immer andere Bilder ausgeworfen. Auch ein Subselect hat nichts sinnvolles ergeben.... Hilfe! ;)

Liebe Grüße
Micha
 
Was für Spalten hat die Tabelle Bilder?
Ist in ihr ein Timestamp oder etwas in der Richtung, mach dem man das neueste Bilder finden kann?

Könntest du vielleicht mal den Aufbau deiner Tabellen hier Posten?
 
Hallo Merzi,

nein es gibt keinen Timestamp. Es soll auch nicht nach "neuen" Bildern sortiert werden. Sondern nach der Spalte "pos" die beinhaltet an welcher Stelle im Album die Bilder stehen. Danach sortiere ich die Bilder in einem Album, wenn ich in die Detailansicht gehe. Der User kann die Bilder nach belieben anordnen. Da hat dann jedes Bild eine eigene Nummer: 1, 2, 3, 4, 5 ..... etc.

Die Tabellen sind in etwa wie folgt aufgebaut:

Album:
id | title | description

Bilder:
id | title | description | path

Album / Bilder:
id | album_id | bild_id | pos


Und als Ausgabe will ich folgendes Ergebnis:
Album aus Tabelle Album.
Join 2x Bilder aus der Bilder-Tabelle On Album/Bilder-Tabelle album_id = Album id
Sortiere die beiden Bilder jeweils nach der Spalte pos aus Album/Bilder nach Min und Max
 
Danke das waren die Angaben, die ich noch gebraucht habe :)

Unter b1 sind die Informationen für das erste Bild zum Abrufen bereit und unter b2 die Informationen des letzten Bildes.
SQL:
select a.id as album_id,
        a.title as album_titel,
        a.description as album_description,
        b1.title as bild1_title,
        b1.description as bild1_description,
        b1.path as bild11_path,
        b2.title as bild2_title,
        b2.description as bild2_description,
        b2.path as bild2_path
    from album a
        inner join album_und_bilder ab1 on ab1.album_id = a.id and
                                                     ab1.pos = ( select min(pos)
                                                                        from album_und_bilder ab
                                                                        where ab.album_id = a.id )
        inner join bilder b1 on b1.id = ab1.bild_id
        inner join album_und_bilder ab2 on ab2.album_id = a.id and
                                                     ab2.pos = ( select max(pos)
                                                                        from album_und_bilder ab
                                                                        where ab.album_id = a.id )
        inner join bilder b2 on b2.id = ab2.bild_id

Im kleinen Versuch hat das Query so funktioniert.
Für volle Funktionalität übernehme ich keine Haftung ;)
 

Neue Beiträge

Zurück