php - pdo 使用 avg 列出前 5 名?

标签 php mysql database pdo

好吧,我再次在努力制作我的电影评级系统:(

我的表结构是

      ID | UserID | Rating | TMDB |  TYPE
      -----------------------------------
       1      34        6     432      2
      -----------------------------------
       2      34        9     432      3
      -----------------------------------
       3      44        9     468      2

感谢用户 Barmar,我能够使用以下方法计算出平均值

$sql = "SELECT AVG(rating) AS avg_rating FROM `tbl_rating` WHERE `tmdb`= :tmdb AND `type`= :type ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':tmdb', $tmdb);
$stmt->bindParam(':type', $type);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$avg_rating = $row['avg_rating'];

现在我想列出前 5 名血腥恐怖的列表(类型 = 2)。我完全不知道如何解决这个问题:(我知道我可以在最后通过一个简单的 LIMIT 命令来限制结果,我认为需要按 AVG(评级)排序?并且我需要删除 WHERE tmdb。我有不知道如何实现这一点,请任何人帮忙!

最佳答案

您可以修改查询以按 tmdb 分组(而不是筛选依据),按 avg_ rating (降序)对结果进行排序,并将返回的行数限制为 5。像这样:

SELECT `tmdb`, AVG(rating) AS avg_rating
FROM `tbl_rating`
WHERE `type`= :type
GROUP BY `tmdb`
ORDER BY avg_rating DESC
LIMIT 5

概念证明:

您可以在 MySQL 控制台中运行以下 SQL 命令来验证查询是否对示例数据返回合理的结果。

create table tbl_rating (
ID int unsigned primary key auto_increment,
UserID int unsigned,
Rating smallint unsigned,
tmdb int unsigned,
type int unsigned) engine=innodb;

insert into tbl_rating
(UserId, Rating, tmdb, `type`) values
(34, 6, 432, 2),
(34, 9, 432, 3),
(44, 9, 468, 2);

SELECT `tmdb`, AVG(rating) AS avg_rating
FROM `tbl_rating`
WHERE `type`= 2
GROUP BY `tmdb`
ORDER BY avg_rating DESC
LIMIT 5;

+------+------------+
| tmdb | avg_rating |
+------+------------+
|  468 |     9.0000 |
|  432 |     6.0000 |
+------+------------+
2 rows in set (0.01 sec)

关于php - pdo 使用 avg 列出前 5 名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39516253/

相关文章:

php - Laravel 中的用户关注系统

php - Laravel 5.4 SQLSTATE[23000] : Integrity constraint violation: 1062 Duplicate entry '0' Live website

mysql - mysql如何分配主键或外键的键长度?

sql - PL/SQL - 动态 sql 格式以文字 varchar 形式出现

node.js - 环回框架中远程方法的默认值

php - 与 NULL 值的表比较

php - 解析 SOAP 负载的 XML 错误 : Reserved XML Name

php - 如何在 laravel eloquent 中检查 2 个日期和时间范围是否重叠

mysql - 我应该如何在存储过程中临时存储行?

java - 甲骨文乘十嵌入到一个java应用程序中