我对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();
}
}
答案 0 :(得分:1)
我认为这是您正在寻找的查询:
select game_id, avg(score) ScoreAverage from game_vote
group by game_id
order by ScoreAverage desc
limit 5