INNER JOIN und max()

unreal1000

Neuer Benutzer
Beiträge
3
Hallo,

ich habe ein Select wie folgt:

Code:
SELECT * FROM test_nav
INNER JOIN test_bilder_titel ON test_nav.id = test_bilder_titel.bild_id
where
anzeigen = 1
and sv = 1
and land = 'de'
and max < 17
GROUP BY name
ORDER BY maximum ASC

dies funktioniert auch soweit, jetzt habe ich in der tabelle test_bilder_titel mehrere bilder. Es soll aber nur das erste bild gezeigt werden. Kann mir jemand helfen. Ich habe gelesen man könnte so etwas mit max() oder min() machen aber ich schaffe es einfach nicht ein richtigen select daraus zu bauen.
Danke im Voraus.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Es soll aber nur das erste bild gezeigt werden.
Das erste Bild nach welcher Sortierung? Beachte, daß in Abfragen mit Aggregation alle Spalten des Resultates entweder aggregiert oder gruppiert sein müssen, auch wenn MySQL dies nicht erzwingt und, hält man sich nicht an diese Regel, zufällige Resultate anzeigt.
 
Vielen Dank für Ihre Antwort.

Leider kann ich mit den Fachbegriffen nichts anfangen.

Zu der Sortierung der Bilder.
In der Tabelle der Bilder sind z.B. drei Bilder gespeichert.

Tabelle: test_bilder_titel

id | name | bild_id
145 | test1.jpg | 128
156 | test2.jpg | 128
200 | test3.jpg | 128

jetzt mache ich den Select,
als letzter wert wird das Bild mit id 200 ausgelesen.
Ich möchte jedoch das Bild mit der kleinsten id (das erste) haben.
In diesm Fall Bild mit id 145
Können Sie mir damit weiterhelfen?

Vielen Dank für Ihre
 
Hi,

ich kenn zwar tabelle test_nav nicht, könnte aber so gehen

Code:
SELECT t.*,b.* FROM test_nav t
INNER JOIN (
  SELECT * FROM test_bilder_titel
  GROUP BY bild_id
  sort BY id ASC
  ) AS test_bilder_titel b ON t.id = b.bild_id
WHERE
t.anzeigen = 1
AND t.sv = 1
AND t.land = 'de'
AND t.max < 17
GROUP BY NAME
ORDER BY maximum ASC

Gruss

Bernd
 
Ich möchte jedoch das Bild mit der kleinsten id (das erste) haben.
In diesm Fall Bild mit id 145

In dem Falle solltest Du nicht gegen die ganze Tabelle joinen, sondern nur noch gegen die passenden Records. Du hast:

Code:
test=*# select * from unreal ;
 id  | bild  | bild_id
-----+-------+---------
 145 | test1 |  128
 156 | test2 |  128
 200 | test3 |  128
(3 rows)

Falls Deine DB DISTINCT ON kann ginge das so:

Code:
test=*# select distinct on (bild_id) id, bild, bild_id from unreal order by bild_id, id ;
 id  | bild  | bild_id
-----+-------+---------
 145 | test1 |  128
(1 row)

Falls nicht:

Code:
test=*# select * from unreal where (id, bild_id) in (select min(id), bild_id from unreal group by bild_id);
 id  | bild  | bild_id
-----+-------+---------
 145 | test1 |  128
(1 row)
 
Werbung:
Zurück
Oben