2017-06-09 5 views
-1

私は2つのテーブルを持っています。私はsame_team上のすべてのユーザーの値(personal_score)を合計し、一時的にteam_nameに割り当て、次にそれらを最高から最低に並べ、最後に最高10を取得します。ループするMySQLクエリを書くことは可能ですか?

User 
    - int id 
    - varchar team_name 
    - int personal_score 

Team 
    - int id 
    - varchar team_name 

それが理にかなっているのであれば...結果は、何かのような... summed_scoreがそれぞれに等しいTEAM_NAMEを持っているユーザーテーブル内のすべてのpersonal_score値の合計である

team_name summed_score 
    Chicago  92 
    RedBulls 90 
    Knights  82 

だろうチームテーブルのteam_name。

今私はこれをPHPを使っているようにしていますが、私は純粋にSQLレベルでやりたいのです...注:私はmedoo.phpを使ってPHPのデータベースに問い合わせています。

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

何を試しましたか?あなたのSQLを入れて誰かがあなたを助けることができます – Syfer

+2

あなたのサンプルの結果に基づいて、 'SELECT team_name、SUM(score)FROM user GROUP BY team_name; –

答えて

1

ループする必要はありません。結果 を制限する

  • LIMITの並べ替えに使用するチーム
  • ORDERによってグループにBY個人スコア
  • GROUPを合計する

    SELECT team_name, SUM(personal_score) AS summed_score FROM User GROUP BY team_name ORDER BY summed_score DESC LIMIT 10; 
    
    • SUM: 例:ちょうどSQL組み込みコマンドを使用します
  • +0

    私はGROUP BYについて完全に忘れました...ありがとうございました! – Ricky

    関連する問題