Hallo Daniela
"SELECT fotosatz_id FROM foto WHERE person_id=2 GROUP BY person_id ORDER BY rang ASC;" liefert mir folgenden erwarteten Datensatz.
kann der order by nicht mehr viel bewirken. Er sortiert sozusagen die eine noch verbleibende Zeile.
Ich dachte mir es so, das die Gruppe nach der Sortieranweisung gebildet wird, dann also der Datensatz angezeigt wird, der der Sortierung entspricht.
Die Query für min sähe nun so aus:
SELECT fotosatz_id, min(rang)
FROM foto
WHERE person_id=2
GROUP BY person_id
Für die Grösste dann einfach min durch max ersetzen.
fotosatz_id person_id rang
10 2 3
143 2 2
567 2 1
Mit Deinem SQL-Statement wird mir nun folgendes ausgegeben:
// person_id habe ich mit hinzugefügt
fotosatz_id person_id rang
10 2 1
Es wird mir also der zuerst eingefügte Datensatz angezeigt, mit dem kleinsten rang für person_id=2. Die fotosatz_id steht hier für die Nummer eines Bildes, ich würde also das falsche Bild angezeigt bekommen.
Mit
SELECT fotosatz_id, person_id
FROM foto
WHERE person_id=2 AND rang=1;
würde ich natürlich die richtige Fotonummer bekommen. Dies ist mir aber zu unflexibel. Kann man den den kleinsten gefundenen rang an den Datensatz binden, zudem er gehört? Also die "1" gehört zu 567..., ich konnte dazu jetzt nichts finden.
Zur Zeit sichere ich durch das "Fotosortiertool" ab, daß es einen "Rang 1" gibt und aufsteigend, wenn also die Fotos sortiert werden.
MfG, André Laugks