php - 对电影数据库的 PHP mySQL 查询速度极慢

标签 php mysql sql

我有一个 php 文件查询 mySql 数据库,该数据库在一张表上设置了电影,在另一张表上设置了 movieRatings。我想计算某部电影的“5 星”、“4 星”等评级的数量。我的查询有效,但是它非常慢,因为我意识到对于我要查找的每部电影,它都要遍历整个 movieRatings 表 5 次。

我的查询:

$sql = "SELECT * 
                FROM MOVIE_INFO,
                (SELECT count(ratingValue) as star5 FROM MOVIE_RATINGS2 WHERE itemID=$b[0] AND ratingValue = 5 ) SUB,
                (SELECT count(ratingValue) as star4 FROM MOVIE_RATINGS2 WHERE itemID=$b[0] AND ratingValue = 4 ) SUB1,
                (SELECT count(ratingValue) as star3 FROM MOVIE_RATINGS2 WHERE itemID=$b[0] AND ratingValue = 3 ) SUB2,
                (SELECT count(ratingValue) as star2 FROM MOVIE_RATINGS2 WHERE itemID=$b[0] AND ratingValue = 2 ) SUB3,
                (SELECT count(ratingValue) as star1 FROM MOVIE_RATINGS2 WHERE itemID=$b[0] AND ratingValue = 1 ) SUB4

                WHERE movieID = $b[0]";

我想如果我可以从该特定电影的电影评级中提取一次子集,它会大大加快它的速度,但我不记得如何做到这一点。

最佳答案

您正在执行多个子选择。相反,尝试分组查询,例如

SELECT ratingValue, COUNT(ratingValue) FROM MOVIE_INFO
WHERE movieID = $b[0]
GROUP BY ratingValue

您将针对每个星级类别返回一行。第一列将是评分本身(例如 1),第二列将是具有该星数的评分数。

关于php - 对电影数据库的 PHP mySQL 查询速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249414/

相关文章:

MySQL检查另一个表中是否存在相同的值3次

jquery - 不断收到错误警告:PDOStatement::execute() 最多需要 1 个参数,2 个在 config.php 第 15 行中给出

PHP:在 foreach 循环中从数组中获取 key

javascript - 按下按钮时写入文件

mysql - 如何在没有 ASCII session 的情况下将二进制流插入到 MySQL 中?

sql - 尝试使用 xp_cmdshell 移动文件时访问被拒绝

mysql - 将 MYSQL GROUP_CONCAT 与子查询一起使用

javascript - html表格行获取单元格值

php - 为什么我的创建表单请求在 Laravel5 中抛出 404 异常?

php - 从一个表中获取在另一表中分配的所有记录