2014-11-24 62 views
0

我有一个ID为id,template_id和destination_id的数据库表。我想统计每个destination_id中的template_id的数量。所以我得到一个目标中每个模板的总数。CakePHP计算所有具有某个ID中的ID的项目

在模型中我已经把这个:

var $virtualFields = array(
    'template_count' => 'COUNT(Content.template_id)' 
); 

而且我得到每个模板的计数。只有我很无力如何获得总数

+0

您是否尝试过一个标准的find()方法与条件? – Dave 2014-11-24 18:25:39

+0

是的,我做了,但我必须结合template_id每个目的地执行查询。这有效,但在我们的用户故事中,这意味着15 * 150的查询。我听说有一个选项可以获得每个目标的数组,每个模板的计数值 – 2014-11-24 18:32:21

回答

1

我会而不是基于聚合函数定义模型中的虚拟字段。

我想你需要的是一个查询,看起来像:

SELECT Content.destination_id, COUNT(Content.template_id) AS template_count 
FROM contents AS CONTENT 
GROUP BY Content.destination_id 

尝试使用此代码CakePHP的:

$this->find('all' array(
    'fields' => array('Content.destination_id' 
        , 'COUNT(Content.template_id) AS template_count'), 
    'group' => array('Content.destination_id'))); 
+0

我会使用虚拟字段。它在2.x中更干净。 – mark 2014-11-24 19:35:10

+0

这也给了我每个目的地ID总数,而我需要有每个destination_id模板1,模板2等的数量 – 2014-11-24 19:39:03

+0

@mark - 你在虚拟领域中使用聚合函数?当'SELECT'有一个聚合函数并且没有'GROUP BY'时,MySQL将只返回1行。 2.x以某种方式照顾这个问题? – AgRizzo 2014-11-24 20:26:04

相关问题