2012-10-25 43 views
1

我正在使用cakephp 2.1,我想要得到平均電影的評級。 其中'電影'是一個模型,它包含'Language'和'CriticReview'作爲模型。 陣列結構如下。CakePHP 2.1平均查詢功能

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' 
        ) 
    ) 
)); 

所以我得平均評論評論。請幫我找出解決方案。這項工作將是可觀的。

回答

2

我不知道你怎麼查詢貌似現在,但你可以嘗試添加該字段:

$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

+1

你可以使它成爲'virtualField',以便將它放入數組中的模型鍵中。 – tigrang

+0

rlcabral:我已經嘗試過那個,但它只顯示第一個電影ID和其他有空。 – Sanganabasu

+0

你可以使用控制器中的'find'和調試中的MySQL查詢更新問題嗎? – rlcabral