André Laugks: mySQL: GROUP BY Problem

Beitrag lesen

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