2

私はcakephp2.1を使用していますが、特定の映画の映画のレイティングの平均を取得したいと思います。ここで、「Movie」はモデルであり、モデルとして「Language」と「CriticReview」が含まれています。配列構成は以下のとおりです。

    array(
(int) 0 => array(
    'Movie' => array(
        'id' => '4',
        'name' => 'Maattrraan',
        'cover_image' => '/movies/4d0d1c41d956a2cb2ab93603d1fdf70c.jpg',
        'release' => '2012-10-12',
        'runtime' => '',
        'budget' => '65 crore',
        'box_office' => '',
        'language_id' => '2',
        'industry_id' => '3'
    ),
    'Language' => array(
        'id' => '2',
        'name' => 'tamil'
    ),
    'CriticReview' => array(
        (int) 0 => array(
            'rating' => '4',
            'movie_id' => '4'
        ),
                    (int) 1 => array(
                            'rating' => '3',
                            'movie_id' => '4'
                    )
    )
),
(int) 1 => array(
    'Movie' => array(
        'id' => '1',
        'name' => 'Romeo',
        'cover_image' => '/movies/32aa2788fa5e1584d4c627c56214574e.jpg',
        'release' => '2012-07-06',
        'runtime' => '',
        'budget' => '',
        'box_office' => '',
        'language_id' => '1',
        'industry_id' => '1'
    ),
    'Language' => array(
        'id' => '1',
        'name' => 'kannada'
    ),
    'CriticReview' => array(
        (int) 0 => array(
            'rating' => '6',
            'movie_id' => '1'
        ),
                    (int) 1 => array(
                            'rating' => '3',
                            'movie_id' => '1'
                    )
    )
));

だから私は批評家のレビューの平均をしなければなりません。解決策を見つけるのを手伝ってください。仕事はかなりのものになります。

4

1 に答える 1

2

クエリがどのように表示されるかはわかりませんが、次のフィールドを追加してみてください。

$this->Movie->find("all", array(
    "fields"     => array("AVG(CriticReview.rating) AS AverageRating"),
    "conditions" => ...
));

返される配列には、次の0ようなキーを持つ各ムービー内のサブ配列が含まれます

[0] => Array
    (
        [AverageRating] => AVG_CALCULATED_BY_MYSQL
    )

個人的には、その場で計算するよりも、計算されたデータを保存する方が好きです。この質問を読みたいと思うかもしれません: MySQL - オンザフライでフィールドを計算する vs 計算されたデータを保存する

于 2012-10-25T21:00:00.037 に答える