2017-08-10 5 views
-1

Ich bin so total verloren.MySQL: Join drei Tabellen und erhalten zählt

Arbeiten an einer Datenbank für meine Co-Rec-Team. Spieler, Matches, Verfügbare Spieler für ein Match, ausgewählte Spieler für ein Match, etc .....

Der erste große Schritt, den ich möchte, ist in der Lage sein, Spieler, Matches und Available zu kombinieren, um eine Liste zu erhalten passt mit der Anzahl der Frauen und der Anzahl der verfügbaren Männer zusammen.

Hier sind meine Tabellen:

Spieler (id, Geschlecht, Namen, ....)

id Gender Name 
1 M  David 
2 M  Alberto 
3 F  Alison 
4 F  Karen 
5 F  Callie 
6 M  Stephan 

Spiele (id, ...)

id  
    1 
    2 
    3 

verfügbar (ID, MatchID, PlayerID)

id matchID PlayerID 
    1  1   1 
    2  1   8 
    3  1  11 
... ...  ... 
    16 2   1 
    17 2   2 
    18 2  15 
... ...  ... 
    26 3   6 
    27 3   7 
    28 3  18 

Gewünschte Res ult

Match  Women  Men  Total 
    1   5  10  15 
    2   4  6  10 
    3   6  10  16 
...  ...  ...  ... 

Hier ist die nächste, die ich habe (gerade heute Morgen):

select m.id, p.gender 
    from matches m 
    inner join available a on m.id = a.matchid 
    inner join players p on p.id = a.playerid 
+1

Ich glaube, Sie immer noch Ihren Code so weit veröffentlichen sollte. Zu lernen, warum dein Code nicht funktioniert, ist viel besser als jemand, der dir sagt, was funktionieren wird. – kaineub

+0

Diese Frage sollte hilfreich sein, um die verschiedenen Zählungen zu erhalten: https://stackoverflow.com/questions/33139000/multiple-query-same-table-but-in-different-columns-mysql/33139182#33139182 – Barmar

+0

Dies sollte hilfreich sein zum aggregieren, wenn Sie mehreren Tabellen beitreten: https://stackoverflow.com/questions/37199736/a-count-for-each-join-optimization – Barmar

Antwort

0

Morgen Klarheit:

select m.id, 
    sum(case when p.gender="Male" then 1 else 0 end) "Males", 
    sum(case when p.gender="Female" then 1 else 0 end) "Females", 
    count(p.gender) "Total" 
from matches m 
inner join available a on m.id = a.matchid 
inner join players p on p.id = a.playerid 
group by m.id