2016-11-25 2 views
1

Ich habe eine Tabelle und eine Abfrage, die ich benutze, um eine Liste von Spielern zurückzugeben, die die meisten Tore erzielt haben.Ist es möglich, einen JOIN zu dieser SQL-Anweisung hinzuzufügen?

Die Abfrage funktioniert gut, aber um den Namen des Benutzers zu erhalten, muss ich eine andere Abfrage basierend auf den zurückgegebenen Ergebnissen (player_id) durchführen.

Ist es möglich, meine vorhandene Abfrage zu ändern, um die beiden Tabellen zu verbinden? Ich weiß, dass dies mit einer normalen Abfrage möglich ist, ich bin nur nicht sicher, ob es in diesem Fall ist, da die benutzerdefinierte Ergebnistabelle zurückgegeben wird.

Dies ist meine erste Tabelle, genannt results:

+----------------+-------------+-----+ 
| Field   | Type  | Key | 
+----------------+-------------+-----+ 
| results_id  | int   | Pri | 
| community_id | int   |  | 
| player1_id  | int   |  | 
| player1_goals | int   |  | 
| player2_id  | int   |  | 
| player2_goals | int   |  | 
+----------------+-------------+-----+ 

Dies ist die Abfrage, die ich meine Ergebnisse zurückzukehren bin mit:

select player, sum(goals) from 
((select player1_id as player, player1_goals as goals from results where community_id = 5) 
union all 
(select player2_id as player, player2_goals as goals from results where community_id = 5) 
) p 
group by player 
order by sum(goals) desc 

Und das ist, wie meine Ergebnisse zurückgegeben werden:

+----------------+------------+ 
| Player   | sum(goals) | 
+----------------+------------+ 
| 2    | 94   | 
| 14    | 63   | 
| 7    | 43   | 
+----------------+------------+ 

Ist es möglich, die obige Abfrage zu ändern und einehinzuzufügenmeiner users Tabelle:

+--------+-----------+ 
| id  | user_name | 
+---------------------+ 
| 2  | John  | 
| 7  | Andrew  | 
| 14  | Charles | 
+--------+------------+ 

einen Ausgang zu bekommen:

+----------------+----------------+------------+ 
|user_name  | Player   | sum(goals) | 
+----------------+----------------+------------+ 
| John   | 2    | 94   | 
| Charles  | 14    | 63   | 
| Andrew   | 7    | 43   | 
+----------------+----------------+------------+ 
+0

Gibt es nur 2 Spieler in einem Spiel? Sollte nicht jeder Spieler eine Reihe einen Spielertisch haben? –

Antwort

0

Kurze Antwort - ja, man kann:

select u.user_name, sum(goals) from 
((select player1_id as player, player1_goals as goals from results where community_id = 5) 
union all 
(select player2_id as player, player2_goals as goals from results where community_id = 5) 
) p 
join users u on p.player = u.id 
group by player 
order by sum(goals) desc 
+1

Ausgezeichnet !! Es funktionierte! Das ist, was ich eine kurze Antwort auf eine lange Frage mag! :) – Northfield82

1

Sie tun können, es mit einem join. Sie können dies auch so ausdrücken:

select u.*, 
     (select sum(case when u.id = r.player1_id then r.player1_goals else r.player2_goals) 
     from results r 
     where r.community_id = 5 and 
       u.id in (r.player1_id, r.player2_id) 
     ) as goals 
from users u; 
Verwandte Themen