Gregor: Mehrstufige Gruppierung

Beitrag lesen

besser als ausprobieren wäre ein blick in die online-doku gewesen, dort stehen auch beispiele für gruppierungen.

Hm. Also in der Doku wo ich gekuckt hab stands halt so direkt nicht drin und auch kein Beispiel, wer kann schon ahnen das mit "expr" mehrere Spalten durch Kommata separiert gemeint ist...  (http://dev.mysql.com/doc/refman/5.0/en/select.html).

SELECT
(SELECT name FROM spieler WHERE id = spielerId) AS spieler1,
erstens wäre ich bei mehreren tabellen vorsichtig, was die eindeutigkeit von spaltennamen angeht, sprich ich würde die tabellennamen noch zu den spaltennamen hinzufügen, beispiel:

Da die einzelnen Abfragen in immer nur einer Tabelle nachschauen und sich nicht überschneiden hab ich mir den Extraaufwand gespart. Bei JOINs und anderen Anfragen mache ich schon genau so wie du es vorgeschlagen hast (Tabellenalias.Spaltenname)

des weiteren hat die bedingung doppelpartnerId IS NOT NULL nichts in der HAVING klausel zu suchen, sondern gehört in die WHERE klausel.

Ich dachte man sollte bei Gruppierungen das HAVING benutzen weil das WHERE das Ergebnis der Gruppierung zu dem Zeitpunkt ja nicht kennt (meine ich mal irgendwo gehört zu haben, lasse mich da aber gerne belehren)

und drittens fäßt du spiele nicht zusammen, wo die reihenfolge der spielerID und der doppelpartnerID genau umgekehrt ist. oder aber du hast redundanz in der tabelle, wenn du jeweils für jeden doppelpartner einen datensatz speicherst. letztlich ist meiner meinung nach die problematik auf das daten-design zurückzuführen.

Ich habe keine Redundanz in der Tabelle, jedes Doppel kriegt genau eine Tabellenzeile. Das Problem ist mir auch schon aufgefallen, trifft aber in diesem Anwendungsfall nicht zu, weil bei den Doppelspielern der auf dem Mannschaftsmeldeformular höher aufgestellte Spieler (der nominell stärkere) immer als erstes genannt wird, und die Doppel nur in dieser Reihenfolge angegeben werden. Der Problemfall tritt also nicht auf (solange die Mannschaft nicht umgestellt wird, was höchstens NACH einer Saison passiert, ab dann heißt das Doppel auch offiziell anders).

mfg Gregor Jochmann