【问题标题】:CakePHP 2.1 Avg function for queryCakePHP 2.1 Avg 查询函数
【发布时间】:2012-10-25 13:10:41
【问题描述】:

我正在使用 cakephp 2.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'
                    )
    )
));

所以我必须平均评论评论。请帮我找出解决方案。这项工作将是可观的。

【问题讨论】:

    标签: cakephp cakephp-2.1 average


    【解决方案1】:

    我不知道你的查询现在是什么样子,但你可以尝试添加这个字段:

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

    返回的数组现在将在每部电影中包含一个子数组,其键为 0,如下所示

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

    我个人更喜欢保存计算数据而不是即时计算。也许您想阅读这个问题:MySQL - Calculating fields on the fly vs storing calculated data

    【讨论】:

    • 您可以将其设为virtualField,以便将其放入数组中的模型键中。
    • rlcabral:我试过了,但它只显示第一个电影 id 和其他有 null 的电影。
    • 你能用控制器中的find 和调试中的 MySQL 查询来更新问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2019-07-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多