平均得分排名前5位?

时间:2012-02-11 23:15:51

标签: php sql codeigniter

我对PHP和CodeIgniter都很陌生,所以请原谅我发布这样一个基本问题!

我的网站上有一个系统,用户可以在其中获得10分的游戏。这些分数存储在名为game_vote的表格中,其中包含列id,game_id,user_id和得分 - 所以它相对直接前进。

我想做的是,返回PER游戏的前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();

    }

}

1 个答案:

答案 0 :(得分:1)

我认为这是您正在寻找的查询:

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