1

我正在使用其他人的 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,因为用户的评分与评分一样多,所以所有变量最终都具有相同的值。

我尝试使用==and=>而不是=,但它们返回错误。

我已经尝试COUNT(PanelPref.panel_rating_id WHERE PanelPref.panel_rating_id = 3) AS rated_three并得到了一个错误。

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

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

4

2 回答 2

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'

这些项目是“字段”数组的一部分,对应于通用 T-SQL 代码块的 SELECT 区域。看起来你想要的是项目的评分计数,所以这个案例总和是解决这个问题的一种 hacky 解决方法。

于 2013-06-04T23:07:23.017 回答
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',
于 2013-06-07T22:49:00.743 回答