erste Zeile einer Gruppe ausgeben
Timo
- datenbank
0 EKKi- menschelei
0 Vinzenz Mai0 Timo
Hallo,
ich habe folgendes Szenario. Auf einem MS SQL-Server existieren zwei Tabellen
Gallerie mit den Spalten
gal_id gal_titel gal_datum gal_status ...
GallerieImages mit den Spalten
gi_id gi_gal_id gi_image gi_sortorder ...
d.h. in der Tabelle GallerieImages sind eine Reihe von Bildernamen, die jeweils einer Gallerie aus der Tabelle Galleries zugeordnet sind.
Ich möchte jetzt eine Abfrage, welche mir folgendes Ergebnis zurückliefert
gal_id gal_titel gal_datum gi_image
wobei gi_image nur das erste Bild aus der entsprechenden Gallerie ist. Dazu benutze ich momentan ein SQL-Statement ähnlich wie
SELECT Galleries.gal_id, Galleries.gal_titel, Galleries.gal_datum, GalleriesImages.gi_image
FROM Galleries INNER JOIN
GalleriesImages ON Galleries.gal_id = GalleriesImages.gi_gal_id
WHERE (Galleries.gal_status = 1)
ORDER BY Galleries.gal_datum, GalleriesImages.gi_sortorder, GalleriesImages.gi_id DESC
wobei die Resultatliste hier aussieht wie
gal_id gal_titel gal_datum gi_image
1 Weihnachten 24.12.07 bild1.jpg
1 Weihnachten 24.12.07 bild2.jpg
1 Weihnachten 24.12.07 bild3.jpg
1 Weihnachten 24.12.07 bild4.jpg
2 Silvester 31.12.07 pic1.gif
2 Silvester 31.12.07 pic2.gif
2 Silvester 31.12.07 pic3.gif
Ich möchte aber nur
gal_id gal_titel gal_datum gi_image
1 Weihnachten 24.12.07 bild1.jpg
2 Silvester 31.12.07 pic1.gif
Hat jemand eine Idee, wie ich mein SQL-Statement so umbauen kann, dass es mir das gewünschte Resultat liefert bzw. ist dies innerhalb eines einzelnen SQL-Statements überhaupt möglich (ich benutzt MS SQL 2000)?
Danke für jeden Hinweis
Timo
Mahlzeit,
Gallerie mit den Spalten
gal_id gal_titel gal_datum gal_status ...GallerieImages mit den Spalten
gi_id gi_gal_id gi_image gi_sortorder ...
<überleg mode="grübel">
Wieso kennt eigentlich kaum ein 1337-H4X0r das deutsche Wort "Galerie"?
</überleg>
MfG,
EKKi
Hallo
Ich möchte jetzt eine Abfrage, welche mir folgendes Ergebnis zurückliefert
gal_id gal_titel gal_datum gi_image
wobei gi_image nur das erste Bild aus der entsprechenden Gallerie ist. Dazu benutze ich momentan ein SQL-Statement ähnlich wie
gal_id gal_titel gal_datum gi_image
1 Weihnachten 24.12.07 bild1.jpg
2 Silvester 31.12.07 pic1.gif
wie üblich geht dies mit einer korrelierten Unterabfrage, siehe auch dieses Archivposting:
SELECT -- Gib mir
g.gal_id, -- die ID der Galerie,
g.gal_titel, -- ihren Titel
g.gal_datum, -- ihr Datum
gi.gi_image -- und ein Bild
FROM
galerie g -- aus jeder Galerie
INNER JOIN
galerieimages gi -- und den zugehörigen Bildern
ON
g.gal_id = gi.gi_gal_id
/*
Beachte:
Da Du in der Unterabfrage auf die gleiche Tabelle zugreifst und diese
über die WHERE-Klausel mit der äußeren Tabelle verknüpfst, was man eben
als korrelierte Unterabfrage bezeichnet, musst Du unbedingt Aliasnamen
für die Tabelle galerieimages verwenden.
*/
WHERE -- wobei ich nur das Bild haben möchte,
gi.gi_sortorder = ( -- dessen Sortierungswert den
SELECT
MIN(gi2.gi_sortorder) -- kleinsten Wert
FROM
galerieimages gi2 -- innerhalb der Galerien hat.
WHERE
gi2.gi_gal_id = gi.gi_gal_id
)
Ich habe es nicht übers Herz gebracht, Galerie mit zwei L zu schreiben, da
kommt mir nämlich die Galle hoch - und das mag ich überhaupt nicht.
MS SQL Server 2000 unterstützt Subqueries, da brauchst Du Dir keine Gedanken
zu machen.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
wie üblich geht dies mit einer korrelierten Unterabfrage, siehe
auch dieses
Archivposting:
danke vielmals für deine Arbeit und die ausführliche Aufschlüsselung. Die Alias-Benennung war der Hinweis, den ich gebraucht habe.
und bei der Benennung meiner Datenbanktabellen gelobe ich Besserung O:-)
Viele Grüße
Timo