我正在使用别人的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,但它似乎不能在数组字段中工作(而且我可能还没有正确使用它)。
有关如何使这项工作的任何想法?这不重要,但我真的很想拥有它。
答案 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',