Hi André
"SELECT fotosatz_id FROM foto WHERE person_id=2 GROUP BY person_id ORDER BY rang ASC;" liefert mir folgenden erwarteten Datensatz.
Dass kann so nicht funktionieren. Mit dem group by sagst du ihm sozusagen, ich will alle Datensätze für eine person_id zu einer einzigen zusammengefasst haben und da es nur noch eine Zeile ist, kann der order by nicht mehr viel bewirken. Er sortiert sozusagen die eine noch verbleibende Zeile. Welche Zeile genommen wird, ist zufällig (im Normalfall eben die erste, aber das ist auch nicht verlässlich).
Was du nun brauchst, sind Gruppenfunktionen, in deinem Fall min und max.
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.
Gruss
Daniela