使用CakePHP 2选择2列

时间:2016-08-12 08:27:38

标签: php sql sql-server cakephp-3.0

打扰一下,如果标题不适合我的问题。

我有一个名为销售的表格和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'))));
}

我使用PHP将myview.ctp中的结果显示到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.

非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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);