tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
439
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Bicko Bicko ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    160
    Hi,

    Ich versuche gerade eine Statistic fuer Spieler zu erstellen, habe mich voellig festgefahren und hoffe nun, dass Ihr mir weiterhelfen koennt.

    Ich habe also eine Tabelle tblMatchPlayers:

    - FixtureID
    - Player
    - Goals
    - MatchTypeID

    Nun moechte ich auf meiner Statistic Seite eine Tabelle anzeigen mit den folgenden Daten:

    Player, League Goals, CupA Goals, CupB Goals ... Total Goals

    Ich vermute das ich dies ueber Subqueries erledigen muss. Hier mal mein Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    SELECT  
       Tab1.*
    FROM
     
       (SELECT Sum(tblMatchPlayers.Goals) AS TotalGoals, 
        tblMatchPlayers.Player AS Player  
        FROM tblmatchplayers GROUP BY Player) AS Tab1
     
    GROUP BY  
       Player
    ORDER BY
       Tab1.TotalGoals desc
    Ich habe jetzt das Ganze erweitert:
    Code :
    1
    2
    3
    
     (SELECT Sum(tblMatchPlayers.Goals) , 
    tblMatchPlayers.Player AS Player, MatchTypeID FROM tblmatchplayers 
    GROUP BY MatchTypeID,Player) AS Tab2

    Aber die Werte passen so ueberhaupt noch nicht. Ist das ueberhaupt moeglich was ich vor habe? Hat jemand eine Idee? Egal was ich bisher probiert habe gab voellig falsche Ergebnisse. Freue mich ueber jeden Ansatz.

    Gruss Bicko
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ohne die Inhalte der Tabelle und das gewünschte Resultat zu sehen, sehe ich grad keinen groben Fehler.

    Was machst du mit den Tab2? Ersetzt der Tab1? Oder ist es eine 2te Quelle im FROM-Teil des Haubtqueries?

    Am besten poste mal einie Testdaten, wie sie in der Tabelle sind und wie sie als Resultat rauskommen müssten.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Bicko Bicko ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    160
    Hi,

    Also Tab2 ist ein zusaetzlicher Subquery also sieht es jetzt so aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    SELECT  Tab1.* , Tab2.*
    FROM
      (SELECT Sum(tblMatchPlayers.Goals) AS TotalGoals, 
      tblMatchPlayers.Player AS Player   
      FROM tblmatchplayers GROUP BY Player) AS Tab1,
     
      (SELECT Sum(tblMatchPlayers.Goals) , 
      tblMatchPlayers.Player AS Player, MatchTypeID FROM tblmatchplayers 
      GROUP BY MatchTypeID,Player) AS Tab2
     
    GROUP BY  
      Tab2.Player, Tab2.MatchTypeID
    ORDER BY
      Tab1.TotalGoals desc

    Mein Tabellendaten sehen so aus:
    FixtureID, Player, Goals, MatchTypeID

    10, 'Player 1', 3, 55
    10, 'Player 2', 4, 55
    11, 'Player 2', 2, 35
    11, 'Player 1', 1, 35

    Mein Ergebnis so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    Array
    (
        [0] => 4
        [TotalGoals] => 4
        [1] => Player 1
        [Player] => Player 1
        [2] => 1
        [Sum(tblMatchPlayers.Goals)] => 1
        [3] => Player 1
        [4] => 35
        [MatchTypeID] => 35
    )
     
    Array
    (
        [0] => 4
        [TotalGoals] => 4
        [1] => Player 1
        [Player] => Player 2
        [2] => 2
        [Sum(tblMatchPlayers.Goals)] => 2
        [3] => Player 2
        [4] => 35
        [MatchTypeID] => 35
    )
     
    Array
    (
        [0] => 4
        [TotalGoals] => 4
        [1] => Player 1
        [Player] => Player 1
        [2] => 3
        [Sum(tblMatchPlayers.Goals)] => 3
        [3] => Player 1
        [4] => 55
        [MatchTypeID] => 55
    )
     
    Array
    (
        [0] => 4
        [TotalGoals] => 4
        [1] => Player 1
        [Player] => Player 2
        [2] => 4
        [Sum(tblMatchPlayers.Goals)] => 4
        [3] => Player 2
        [4] => 55
        [MatchTypeID] => 55
    )

    Dabei duerfte es ja nur 2 Results geben, da ist dann schon mal der erste Fehler. Ich vermute das liegt an Group By oder?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von Bicko Beitrag anzeigen
    Dabei duerfte es ja nur 2 Results geben, da ist dann schon mal der erste Fehler. Ich vermute das liegt an Group By oder?
    Nope. Das liegt daran, dass du 2 Quellen hast und diese nicht miteinander verknüpfst. Somit hast du [Anzahl Zeilen Tab1]x[Anzahl Zeilen Tab2] Zeilen in der AUsgabe.

    Du musst diese 2 Tabs entweder mittels JOIN-Befehl oder mit einer Bedinung im WHERE-Teil verknüpfen
    Code sql:
    1
    
    WHERE Tab1.Player = Tab2.Player
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Bicko Bicko ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    160
    Oh Du hast Recht. Vielen Dank ! Jetzt habe ich 4 results und Frage mich ob das so Richtig ist....

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
    Array
    (
        [0] => Player 2
        [Player] => Player 2
        [1] => 6
        [TotalGoals] => 6
        [2] => 2
        [Goals] => 2
        [3] => League Cup
        [MatchType] => League Cup
        [4] => 35
        [MatchTypeID] => 35
    )
     
    Array
    (
        [0] => Player 2
        [Player] => Player 2
        [1] => 6
        [TotalGoals] => 6
        [2] => 4
        [Goals] => 4
        [3] => League
        [MatchType] => League
        [4] => 55
        [MatchTypeID] => 55
    )
     
    Array
    (
        [0] => Player 1
        [Player] => Player 1
        [1] => 4
        [TotalGoals] => 4
        [2] => 1
        [Goals] => 1
        [3] => League Cup
        [MatchType] => League Cup
        [4] => 35
        [MatchTypeID] => 35
    )
     
    Array
    (
        [0] => Player 1
        [Player] => Player 1
        [1] => 4
        [TotalGoals] => 4
        [2] => 3
        [Goals] => 3
        [3] => League
        [MatchType] => League
        [4] => 55
        [MatchTypeID] => 55
    )

    Mein Query hat sich etwas abgewandelt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    SELECT
      Tab1.Player , TotalGoals, Tab2.Goals, Tab2.MatchType, Tab2.MatchTypeID
     
    FROM
     (SELECT Sum(tblMatchPlayers.Goals)  AS TotalGoals, tblMatchPlayers.Player
      FROM tblmatchplayers GROUP BY Player) AS Tab1,
     
     (SELECT Sum(tblMatchPlayers.Goals) AS Goals, tblMatchPlayers.MatchTypeID,
      tblMatchType.MatchType, Player 
      FROM tblmatchplayers
      INNER JOIN tblMatchType ON tblMatchPlayers.MatchTypeID = tblMatchType.MatchTypeID
      GROUP BY tblMatchPlayers.MatchTypeID,Player) AS Tab2
     
      WHERE
      Tab1.Player = Tab2.Player
     
      GROUP  BY Tab2.MatchTypeID, Tab1.Player
      ORDER BY TotalGoals desc, Tab1.Player

    Macht das jetzt so Sinn? Ich vermute mal das ich die MatchTypes nicht in ein array bekomme. Was mich verwundert ist warum ich die Eintraege immer doppelt habe, z.B
    [3] => League Cup
    [MatchType] => League Cup

    Kann ich das noch irgendwie verbesser bzw. ist das ueberhaupt so richtig?
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von Bicko Beitrag anzeigen
    Macht das jetzt so Sinn? Ich vermute mal das ich die MatchTypes nicht in ein array bekomme.
    Nimmt dein SQL als Unterabfrage und häng dann noch den die Tabelle mit den MathcType an.

    Zitat Zitat von Bicko Beitrag anzeigen
    Was mich verwundert ist warum ich die Eintraege immer doppelt habe, z.B
    [3] => League Cup
    [MatchType] => League Cup

    Kann ich das noch irgendwie verbesser bzw. ist das ueberhaupt so richtig?
    http://ch.php.net/manual/de/function...etch-array.php
    Die Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays abgelegt, als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen Indizes werden die Feldnamen benutzt.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Mysql Abfrage mit mehreren Selects fehler Subquery
    Von kramoo im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 06.01.11, 23:15
  2. Mysql update mit Subquery returns more than 1 row
    Von p-dichlorbenzol im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 03.03.09, 15:14
  3. MYSQL Sortierung mit subquery
    Von Cusco im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 26.02.09, 17:55
  4. MySql Subquery über 2 Tabellen
    Von Deletemaster im Forum Relationale Datenbanksysteme
    Antworten: 12
    Letzter Beitrag: 22.02.08, 23:56
  5. [MySQL] Hilfe bei Subquery
    Von Flusswind im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 23.07.06, 23:20