0

私は、あるテーブルに映画を、別のテーブルにmovieRatingsを設定したmySqlデータベースを照会するphpファイルを持っています。特定の映画が持っている「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]";

その特定の映画の映画評価からサブセットを一度引き出すことができれば、非常に高速になると思いますが、その方法を思い出せません。

4

1 に答える 1

3

複数の副選択を実行しています。代わりに、グループ化クエリを試してください。

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

スター カテゴリごとに 1 行が返されます。最初の列は評価自体 (例: 1) で、2 番目の列はその数の星を持つ評価の数です。

于 2013-04-27T07:16:21.603 に答える