Топ 5 средних баллов? - PullRequest
       0

Топ 5 средних баллов?

2 голосов
/ 12 февраля 2012

Я довольно новичок в PHP и CodeIgniter, поэтому прошу прощения за то, что я опубликовал такой элементарный вопрос!

У меня есть система на моем веб-сайте, где пользователи могут оценивать игры из 10. Эти оценки хранятся в таблице с именем game_vote, в которой есть столбцы id, game_id, user_id и Score, так что это относительно просто.

Что я хотел бы сделать, так это вернуть 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 Ответ

1 голос
/ 12 февраля 2012

Я думаю, что это запрос, который вы ищете:

select game_id, avg(score) ScoreAverage from game_vote
group by game_id
order by ScoreAverage desc
limit 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...