2012-02-11 64 views
2

我對PHP和CodeIgniter很陌生,所以請原諒我發佈這樣一個基本的問題!前5名的平均分數?

我在我的網站上有一個系統,用戶可以從10分中得分。這些分數存儲在一個名爲game_vote的表格中,該表格有列id,game_id,user_id和分數 - 所以它相對簡單。

我想要做的是,返回前5場總比分。所以我想我需要獲取每個game_id的平均成績,按降序排列順序的平均值,然後限制我的結果,以5

這是到目前爲止我的控制器:

function get_all_game_ratings() 

{ 

    $this->db->select('game_vote.game_id, game_vote.score, game.title'); 
    $this->db->from('game_vote'); 
    $this->db->join('game', 'game.id = game_vote.game_id'); 
    $this->db->group_by('game_vote.game_id'); 
    $this->db->where('game_vote.game_id', 2); 
    $query = $this->db->get(); 

    if ($query->num_rows() > 0) 

    { 

     foreach ($query->result() as $row) 

     { 

      $this->db->select('game_vote.game_id, game_vote.score, game.title'); 
      $this->db->select_avg('game_vote.score'); 
      $this->db->join('game', 'game.id = game_vote.game_id'); 
      $this->db->from('game_vote'); 
      $this->db->where('game_vote.game_id', $row->game_id); 
      $query = $this->db->get(); 

      if ($query->num_rows() > 0) 

      { 

       return $query->result(); 

      } 

     } 

    } 

} 

我覺得我有點正確。

在此先感謝您的幫助。

乾杯!

[編輯]這裏的完成功能任何人都需要它在未來。 :)

function get_user_ratings($limit) 

{ 

    $this->db->select('game_vote.game_id, game_vote.score, game.title'); 
    $this->db->select_avg('game_vote.score'); 
    $this->db->group_by('game_vote.game_id'); 
    $this->db->from('game_vote'); 
    $this->db->join('game', 'game.id = game_vote.game_id'); 
    $this->db->order_by('AVG(game_vote.score)', 'desc'); 
    $this->db->limit($limit); 
    $query = $this->db->get(); 

    if ($query->num_rows() > 0) 

    { 

     return $query->result(); 

    } 

} 
+0

的'AVG(game_vote.score)'應該是'SELECT'名單了。 – 2012-02-12 00:41:27

回答

1

我覺得這是你要找的查詢:

select game_id, avg(score) ScoreAverage from game_vote 
group by game_id 
order by ScoreAverage desc 
limit 5 
+1

謝謝,夥計。現在我將在代碼中編輯我的功能。一切正常。 – Prefontaine 2012-02-12 00:29:52