1

私は、PHP に関する最小限の知識で、他の誰かの CakePHP コードを扱っているので、これは非常に基本的な質問かもしれません。

コントローラー内で、次のコードは配列の作成を開始し、それが .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

これらを次の 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 領域に対応します。あなたが望んでいるように見えるのは、アイテムの評価の数です。したがって、このケースの合計は、これに対するハックな回避策のようなものです。

于 2013-06-04T23:07:23.017 に答える