2017-06-09 3 views
-1

Ich habe zwei Tabellen, ich möchte den Wert (personal_score) für alle Benutzer auf dem gleichen_team zusammenfassen und vorübergehend dem Team_Name zuweisen, und dann von der höchsten zur niedrigsten und schließlich nur die höchste 10 ...Ist es möglich, eine MySQL-Abfrage zu schreiben, die Schleifen?

So
User 
    - int id 
    - varchar team_name 
    - int personal_score 

Team 
    - int id 
    - varchar team_name 

wenn das Sinn macht ... wäre das Ergebnis so etwas wie ...

team_name summed_score 
    Chicago  92 
    RedBulls 90 
    Knights  82 

Wo summed_score ist die Summe aller personal_score Werte in der Benutzertabelle, die eine TEAM_NAME gleich jeder hat team_name in der Team-Tabelle.

Jetzt mache ich das so mit PHP, aber ich möchte es nur auf SQL-Ebene tun ... Hinweis Ich verwende medoo.php, um die Datenbank in PHP abzufragen.

function ComparePersonalScores($a, $b) 
{ 
    return $b["total_score"] - $a["total_score"]; 
} 

// Get all the Team Names possible... 
$Teams = $Database->select("teams", "team_name"); 
$TeamResult_Objects = []; 
foreach($Teams as $team) 
{ 
    $total_score = $Database->query("SELECT SUM(personal_score) as 'summed_score' FROM users WHERE team_name='" . $team . "';")->fetchAll(); 

    $result_object["total_score"] = $total_score[0]["summed_score"]; 
    $result_object["name"] = $team; 
    array_push($TeamResult_Objects, $result_object); 
} 

usort($TeamResult_Objects, "ComparePersonalScores"); 
$TeamResult_Objects = array_slice($TeamResult_Objects, 0, 10); 
+0

Was hast du probiert? Setze dein SQL ein und jemand kann dir helfen – Syfer

+2

Basierend auf deinem Beispielergebnis, 'SELECT team_name, SUM (score) FROM Benutzer GROUP BY team_name;' sollte den Trick machen. –

Antwort

1

Sie brauchen keine Schleife. nur verwenden SQL builtins: Beispiel:

SELECT team_name, SUM(personal_score) AS summed_score FROM User GROUP BY team_name ORDER BY summed_score DESC LIMIT 10; 
  • SUM auf die persönliche Punktzahl
  • GROUP von Team
  • ORDER BY zur Gruppe zusammenzufassen VON
  • LIMIT zu sortieren, um die Ergebnisse zu begrenzen
+0

Ich habe GROUP BY völlig vergessen ... Danke! – Ricky

Verwandte Themen