Я делаю базу данных фильмов с системой рейтинга фильмов, и я хотел бы показывать фильмы с самым высоким рейтингом в среднем.
Вот структура моей базы данных:
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');
}
Но мне не удается создать функцию отображения фильмов по рейтингу. Не могли бы вы помочь мне?
Спасибо
На стороне базы данных вы можете получить сразу весь список фильмов со средним рейтингом. Я разделил его на строки для удобства чтения.
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
Других решений пока нет …