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?
SoUser
- 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);
Was hast du probiert? Setze dein SQL ein und jemand kann dir helfen – Syfer
Basierend auf deinem Beispielergebnis, 'SELECT team_name, SUM (score) FROM Benutzer GROUP BY team_name;' sollte den Trick machen. –