2016-08-12 51 views
0

如果标题不适合我的问题,请不好意思。使用CakePHP 2选择2列

我有一个名为销售和3列的表名为卖家买家价格

我有什么: Before

我想要什么: After

基本上,我想他们已经与一个买家做销售的总和,显示的卖家名单。

这是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')))); 
} 

我显示的结果myview.ctp与PHP HTML表格(我没有把下面的HTLM元素):

<?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. 

非常感谢您的帮助!

+0

你可以在Sales-> find()'上执行'debug()'吗?它应该包含生成的查询。 – Bert

+0

阵列( \t '销售'=>数组( \t \t 'ID'=> '1', \t \t '价格'=> '100', \t \t '买方'=> 'X先生', \t \t'seller'=>'mr.A' \t) ) – heisenberg

回答

0

对于SQL函数,你应该遵循以下语法:Using SQL Functions

试试这个:

对于CakePHP的3:

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

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

pr($mysales); // Check your result 

对于CakePHP的2.x的:

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

在你看来:

pr($mysales); 
+0

感谢您的回复! 选择似乎没有工作,我有这个错误: 调用成员函数select()在数组 – heisenberg

+0

你是否遵循了我指定的完全相同的语法?它不应该显示这样的错误。你正在使用CakePHP 3,对吗? –

+0

我很抱歉,我的管理员告诉我这是CakePHP 3,但我刚刚检查了Version.txt,它说我有CakePHP 2.3。6 – heisenberg