Hallo,
mein erster Beitrag hier.
Ich möchte folgendes Problem lösen:
Innerhalb einer View (mySQL, InnoDb, 5.1.xx) möchte ich die Anzahl der Datensätze bestimmen, die in einer anderen Tabelle und durch eine ID verbunden sind (1:n).
Ein bisschen deutlicher:
Ich habe folgende Tabellen
- user (Stammdaten) [INTID]
- board (Sozusagen Forumseinträge) [INTID, INTID_SPIELER, DATCREATED]
- spiele (Spiele eines Fußballspielplans) [INTID]
- spielmeldungen (Meldungen von usern zu einem bestimmten Spiel) [INTID_USER,INTID_SPIELPLAN, INTID_MELDUNG]
- saison (Alle Saisons die ich anbieten möchte) [INTID, DATSTART, DATEND]
- scorer (Torschützen) [INTID_USER, INTID_SAISON, INTTORE, INTVORLAGEN]
in eckigen Klammern stehen die wichtigen Spalten. Nun ist es einfach eine View zu schreiben, die einfach nur ALLE Daten, aller Spieler in allen Saisons miteinander verbindet.
Was ich nun möchte ist, dass ich eine View erhalte, die mir pro Saison für jeden Spieler auflistet, wieviele Tore, Vorlagen, Boardeinträge und Spiele hat. Quasi gruppiere ich nach Saison und Spieler.
Das klappt auch schon.
Die Tore und Vorlagen werden mir auch korrekt berechnet.
Aber nicht die Einträge im Board, die sind immer noch über den gesamten Zeitraum. Ebenso die Spielteilnahmen.
Über ein wenig Hilfe wäre ich sehr dankbar
Hier meine nisherige View:
mein erster Beitrag hier.
Ich möchte folgendes Problem lösen:
Innerhalb einer View (mySQL, InnoDb, 5.1.xx) möchte ich die Anzahl der Datensätze bestimmen, die in einer anderen Tabelle und durch eine ID verbunden sind (1:n).
Ein bisschen deutlicher:
Ich habe folgende Tabellen
- user (Stammdaten) [INTID]
- board (Sozusagen Forumseinträge) [INTID, INTID_SPIELER, DATCREATED]
- spiele (Spiele eines Fußballspielplans) [INTID]
- spielmeldungen (Meldungen von usern zu einem bestimmten Spiel) [INTID_USER,INTID_SPIELPLAN, INTID_MELDUNG]
- saison (Alle Saisons die ich anbieten möchte) [INTID, DATSTART, DATEND]
- scorer (Torschützen) [INTID_USER, INTID_SAISON, INTTORE, INTVORLAGEN]
in eckigen Klammern stehen die wichtigen Spalten. Nun ist es einfach eine View zu schreiben, die einfach nur ALLE Daten, aller Spieler in allen Saisons miteinander verbindet.
Was ich nun möchte ist, dass ich eine View erhalte, die mir pro Saison für jeden Spieler auflistet, wieviele Tore, Vorlagen, Boardeinträge und Spiele hat. Quasi gruppiere ich nach Saison und Spieler.
Das klappt auch schon.
Die Tore und Vorlagen werden mir auch korrekt berechnet.
Aber nicht die Einträge im Board, die sind immer noch über den gesamten Zeitraum. Ebenso die Spielteilnahmen.
Über ein wenig Hilfe wäre ich sehr dankbar
Hier meine nisherige View:
Code:
CREATE OR REPLACE VIEW view_scorer ( INTID_USER, INTID_SAISON, STRVORNAME, STRNACHNAME, STRPOSITION, INTTORE, INTVORLAGEN, INTSPIELE, INTBOARD, INTPUNKTE, BLNACTIVE ) AS SELECT user.INTID, scorer.INTID_SAISON, user.STRVORNAME, user.STRNACHNAME, position.STRPOSITION, SUM(INTTORE), SUM(INTVORLAGEN), (SELECT COUNT(*) FROM spielplan_meldung WHERE INTID_SPIELER = user.INTID AND INTID_MELDUNG = 1), (SELECT COUNT(*) FROM board WHERE INTID_USER = user.INTID), ( IF( SUM(INTTORE), SUM(INTTORE), 0 ) + IF( SUM(INTVORLAGEN), SUM(INTVORLAGEN), 0 ) + IF( (SELECT COUNT(*) FROM board WHERE board.INTID_USER = user.INTID), ((SELECT COUNT(*) FROM board WHERE board.INTID_USER = user.INTID) / 10), 0) + IF( (SELECT COUNT(*) FROM spielplan_meldung WHERE INTID_SPIELER = user.INTID AND INTID_MELDUNG = 1), (SELECT COUNT(*) FROM spielplan_meldung WHERE INTID_SPIELER = user.INTID AND INTID_MELDUNG = 1), 0 ) ), user.BLNACTIVE FROM user LEFT JOIN position ON position.INTID = user.INTID_POSITION LEFT JOIN scorer ON scorer.INTID_USER = user.INTID LEFT JOIN saison ON scorer.INTID_SAISON = saison.INTID GROUP BY user.INTID, scorer.INTID_SAISON;
Comment