CakePHP:创建一个数组字段,用于保存另一个数组中特定值的计数

时间:2013-06-03 06:25:44

标签: arrays cakephp count

我正在使用别人的CakePHP代码,只需要很少的PHP知识,所以这可能是一个非常基本的问题。

在控制器中,以下代码开始创建一个数组,然后传递给.ctp文件:

$prefs_by_user = $this->PanelPref->find('all', array(
    'fields' => array(
        'UserTimeSlot.day_time_slot_id', 'PanelPref.panel_id', 'Panel.name',
        'COUNT(DISTINCT PanelPref.user_id) AS panels_int' ,

在PanelPref中,面板评级可能等于1,2或3.我想添加字段,计算每个评级给出这个特定面板的人数。我试过这个:

        'COUNT(PanelPref.panel_rating_id = 3) AS rated_three',
        'COUNT(PanelPref.panel_rating_id = 2) AS rated_two',
        'COUNT(PanelPref.panel_rating_id = 1) AS rated_one',

但所有这一切都是计数PanelPref.panel_rating_id,因为有与用户一样多的评级,所有变量都以相同的值结束。

我尝试使用===>代替=,但他们会返回错误。

我尝试了COUNT(PanelPref.panel_rating_id WHERE PanelPref.panel_rating_id = 3) AS rated_three并收到了错误消息。

我尝试过使用array_count_values,但它似乎不能在数组字段中工作(而且我可能还没有正确使用它)。

有关如何使这项工作的任何想法?这不重要,但我真的很想拥有它。

2 个答案:

答案 0 :(得分:3)

用这三个替换:

'SUM(CASE PanelPref.panel_rating_id WHEN 3 THEN 1 ELSE 0 END) AS rated_three',
'SUM(CASE PanelPref.panel_rating_id WHEN 2 THEN 1 ELSE 0 END) AS rated_two',
'SUM(CASE PanelPref.panel_rating_id WHEN 1 THEN 1 ELSE 0 END) AS rated_one'

这些项是“fields”数组的一部分,它对应于通用T-SQL代码块的SELECT区域。你想要的是这个项目的评级数,所以这个案例的总和就是这种hacky解决方法。

答案 1 :(得分:1)

这也应该有效:

'SUM(PanelPref.panel_rating_id = 3) AS rated_three',
'SUM(PanelPref.panel_rating_id = 2) AS rated_two',
'SUM(PanelPref.panel_rating_id = 1) AS rated_one',