2016-08-12 10 views
0

タイトルが私の質問に合わない場合はどうぞよろしくお願いいたします。CakePHP 2で2つの列を選択してください。

私は販売売主バイヤー価格という名前の3列をという名前のテーブルを持っています。私が持っているもの

:私が欲しいもの Before

After

は基本的に私は、彼らが1人の買い手で行っている売上高の合計と売り手の一覧を表示します。

これは私が一緒に行くんだSQLクエリです:

SELECT seller, buyer ,SUM(price) 
FROM sales 
GROUP BY seller , buyer 

私の問題(このクエリはおそらく間違っているということ以外には)CakePHPの中に「翻訳」です。料理を通過した後、私は私のコントローラでこれを持っている:

public function myview(){  
$this->set('mysales', $this->Sales->find('all', 
array('sum(price) AS total','group' => array('seller','buyer')))); 
} 

私はPHPとHTMLのテーブル(私は以下のHTLMの要素を入れていない)にmyview.ctpで結果を表示する:

<?php 
foreach ($mysales as $thesales) 
    {  
     echo $thesales['Sales']['seller']; 
     echo $thesales['Sales']['buyer']; 
     echo $thesales['Sales']['total']; 
    }?> 

もちろん動作しません。私は、SQL Server 2014で働いていると私は、このエラーがあります:あなたの助けを

Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Column 'sales.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

非常にありがとうを! SQL関数について

+0

'Sales-> find()'で 'debug()'を実行できますか?生成されたクエリを含める必要があります。 – Bert

+0

アレイ( \t '販売' =>配列( \t \t 'ID' => '1' \t \t '価格' => '100'、 \t \t 'バイヤー' => 'mr.X'、 \t \t '売り手' => 'mr.A' \t ) – heisenberg

答えて

0

、次の構文に従う必要があります。試してみてくださいUsing SQL Functions

をこの:

CakePHPの3のために

$this->set('mysales', $this->Sales->find('all', 
    array(
    'fields' => array('SUM(price) AS total','seller','buyer'), 
    'group' => array('seller','buyer') 
) 
)); 

:CakePHPの2.Xについて

$mysales = $this->Sales->find(); 

$mysales = $mysales 
    ->select([ 
     'seller', 'buyer', 
     'total_price' => $mysales ->func()->sum('price'), 
     ]) 
    ->group(['seller','buyer']) 
    ->toArray(); 

pr($mysales); // Check your result 

あなたの視点:

pr($mysales); 
+0

お返事ありがとうございます! selectが機能していないようですが、私はこのエラーがあります: 配列のメンバー関数select()を呼び出す – heisenberg

+0

指定した構文とまったく同じですか?このようなエラーは表示されません。あなたはCakePHP 3を使っていますよね? –

+0

私の管理者はCakephp 3だと教えてくれましたが、Version.txtをチェックしたところ、Cakephp 2.3があると言われました。6 – heisenberg

関連する問題