MySql: Problem ein Subquery zu erstellen

Bicko

Erfahrenes Mitglied
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:
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:
 (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
 
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.
 
Hi,

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

Code:
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:
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?
 
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
SQL:
WHERE Tab1.Player = Tab2.Player
 
Zuletzt bearbeitet von einem Moderator:
Oh Du hast Recht. Vielen Dank ! Jetzt habe ich 4 results und Frage mich ob das so Richtig ist....

Code:
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:
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?
 
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.

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.mysql-fetch-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.
 
Zurück