Показать элементы из базы данных MySQL по среднему рейтингу

Я делаю базу данных фильмов с системой рейтинга фильмов, и я хотел бы показывать фильмы с самым высоким рейтингом в среднем.

Вот структура моей базы данных:

Table movies_ratings: ID | movie_id (themoviedb api) | рейтинг
настольные фильмы: id | movie_id | название | обзор | жанры | плакатная дорожка | популярность (themoviedb api)

Есть оценки моего класса в моих моделях:

class Rating extends Connection {

public function rate($id, $value) {
$sql = 'INSERT INTO `movies_ratings` (`movie_id`, `rating`) VALUES(?, ?)';
$params = [$id, $value];
$req = $this->query($sql, $params);
}

public function avg($id) {
$sql = 'SELECT AVG(`rating`) AS avg FROM `movies_ratings` WHERE `movie_id` ='.$id;
$params = [$id];
return $req = $this->query($sql, $params, 'one');
}
}

Я сделал функцию отображения фильмов по популярности, и она работает:

  public function getPopularMovies($offset = null) {
$sql = 'SELECT * FROM `movies` ORDER BY `popularity` DESC';
if ($offset) $sql .= ' LIMIT '.$offset;
return $this->query($sql, null, 'all');
}

Но мне не удается создать функцию отображения фильмов по рейтингу. Не могли бы вы помочь мне?

Спасибо

-2

Решение

На стороне базы данных вы можете получить сразу весь список фильмов со средним рейтингом. Я разделил его на строки для удобства чтения.

SELECT movies.*, AVG(movie_ratings.rating) AS rating
FROM movies
LEFT JOIN movie_ratings ON movies.id = movie_ratings.id
GROUP BY movies.id
ORDER BY rating DESC
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector