cakephp查询中的sum()函数

lp0sw83n  于 2023-04-06  发布在  PHP
关注(0)|答案(5)|浏览(241)

我正在使用这个查询,但它没有返回ctotal。请帮助。

$total = $this->RequestedItem->find('all',
    [
        'sum(cost * quantity) AS ctotal', 
        'conditions' => [
            'RequestedItem.purchase_request_id' => $_GET['po_id']
         ]
     ]
);
mccptt67

mccptt671#

你不应该在CakePHP中直接使用PHP超全局变量。你应该使用Model.field命名,这样你就不会得到不明确的字段错误。
虚拟领域是要走的路,但这不是你的问题,你需要多读一些这本书。

$total = $this->RequestedItem->find('all', array(array('fields' => array('sum(Model.cost * Model.quantity)   AS ctotal'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));

应该工作正常,与virtualFields它会

var $virtualFields = array('total' => 'SUM(Model.cost * Model.quantity)');
$total = $this->RequestedItem->find('all', array(array('fields' => array('total'), 'conditions'=>array('RequestedItem.purchase_request_id'=>$this->params['named']['po_id'])));

字段放在“fields”键中,就像条件放在“conditions”键中一样。http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find

8cdiaqws

8cdiaqws2#

这个也行,对我来说很好

$sum = $this->Modelname->find('all', array(
    'conditions' => array(
    'Modelname.fieldname' => $conditions),
    'fields' => array('sum(Modelname.fieldname) as total_sum'
            )
        )
    );
ghhaqwfi

ghhaqwfi3#

在执行查找之前临时设置virtualFields。

$this->MaterialScan->virtualFields = array(
    'total_qty' => 'COUNT(MaterialScan.id)',
    'total_lbs' => 'SUM(MaterialScan.weight)'
);
$materialScans = $this->MaterialScan->find('all',array(
    'conditions' => array(
        'MaterialScan.id' => $scans
    ),
    'group' => array('MaterialScan.part_number')
));

这避免了在返回的数组中有[0]个元素。

sycxhyv7

sycxhyv74#

你可以使用virtualFields:

var $virtualFields = array(
    'the_sum' => 'SUM(Model.cost * Model.quantity)'
);
pokxtpni

pokxtpni5#

这对我来说很有效。CakePHP在其他常用的SQL函数中有一个sum()函数。请参阅文档中的更多信息:使用SQL函数
我没有使用find('all'),而是通过Salines' answer to this linked question实现了我的解决方案。我还用$this->params['named']['po_id']]替换了你使用的PHP超全局变量。供参考,我使用的是CakePHP3。

$total = $this->RequestedItem->find();
$total->select([
       'RequestedItem.purchase_request_id',
       'ctotal' => $total->func()->sum('cost * quantity')
   ])
   ->where(['RequestedItem.purchase_request_id' => $this->params['named']['po_id']]);

相关问题