Announcement

Collapse
No announcement yet.

Subquery: Count() auf 1:n-Tabelle mit Einschränkung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Subquery: Count() auf 1:n-Tabelle mit Einschränkung

    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:

    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;

  • #2
    Hallo,
    Originally posted by sliwalker View Post
    ...Quasi gruppiere ich nach Saison und Spieler.
    Das klappt auch schon.
    Du mußt nach allen Feldern gruppieren, die im Select-Teil aufgeführt und keine aggregierten Felder sind!

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X