Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php pdo使用平均值列出前5名?_Php_Mysql_Database_Pdo - Fatal编程技术网

Php pdo使用平均值列出前5名?

Php pdo使用平均值列出前5名?,php,mysql,database,pdo,Php,Mysql,Database,Pdo,好的,我再一次努力制作我的电影分级系统:( 我的表结构是 ID | UserID | Rating | TMDB | TYPE ----------------------------------- 1 34 6 432 2 ----------------------------------- 2 34 9 432 3 -------

好的,我再一次努力制作我的电影分级系统:(

我的表结构是

      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'];

现在我想列出五大血腥恐怖事件(type=2)。我完全不知道如何解决这个问题:(我知道我可以在最后通过一个简单的限制命令来限制结果,我认为按平均值(rating)排序)是否需要?我需要删除WHERE tmdb。我不知道如何实现这一点。请任何人帮忙!

您可以将查询修改为group by
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)

如果我在列上使用avg,它会将它们全部加起来,而我需要将它们加在tmdb组ID中?我希望这会让人感觉到,因为我的大脑已经转为MUSH,这看起来像我需要的东西,但是由于某些原因,我得到一个错误致命错误:未捕获异常“PDOException”,带有消息“SQLSTATE[HY093]:无效参数编号:第39行的C:\wamp\www\rating\u results.php中未定义参数,PDOException:SQLSTATE[HY093]:无效参数编号:第39行的C:\wamp\www\rating\u results.php中未定义参数这是我的sql:$sql=“SELECT
tmdb
,AVG(rate)作为
tbl\u rating
中的平均速率,其中
type
=:type GROUP BY
tmdb
ORDER BY avg\u rate DESC LIMIT 5”;删除此行:
$stmt->bindParam(':tmdb',$tmdb)
,因为我从查询中删除了
:tmdb
上的过滤器。