【问题标题】:Extremely slow PHP mySQL query on movies database电影数据库上的 PHP mySQL 查询非常慢
【发布时间】:2013-04-27 15:35:07
【问题描述】:

我有一个 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]";

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

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

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

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

    每个星级类别您将获得一排。第一列将是评分本身(例如 1),第二列将是具有该星数的评分数。

    【讨论】:

      猜你喜欢
      • 2019-09-29
      • 2015-07-28
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多