Cakephp 2.4.5 - 在查询中使用Count with Sum

时间:2014-04-17 06:32:23

标签: php cakephp count

我还没有看到任何将计数值作为查询结果中的字段获取的cakephp示例。 这就是我做的事情

    $searchfilter = array(
                        'Booking.bookingdate >=' => $date_period_current_start,
                        'Booking.bookingdate <=' => $date_period_current_end,
                        'Booking.merchant_id =' => $this->Session->read('Auth.ActiveMerchant')
                    );
    $fields       = array(
                    'COUNT(*) as reccount',
                    'SUM(Booking.pax) as totalpax',
                    );


    $bookings_period_current = $this->Booking->find('all', array('conditions' => $searchfilter, 'fields' => $fields)

    var_dump($bookings_period_current);

现在这似乎工作正常,我的var_dump会产生:

array (size=1)
  0 => 
    array (size=1)
      0 => 
        array (size=2)
          'reccount' => string '7' (length=1)
          'totalpax' => string '28' (length=2)

我想我的问题是:

1)这是使用cakephp进行计数的正确方法吗?注意我没有使用普通的find('Count',...)方法

2)在我的$ fields变量中,我将COUNT(*)指定为reccount ...这效率非常低吗?预订表有几个其他字段,但我真正想要的是记录的总数,以及Booking.pax的总和。

干杯 凯文

1 个答案:

答案 0 :(得分:2)

COUNT(*)的正确方法是find('count'),但是如果您想在同一个查询中获取更多字段,那么您的解决方案就可以了。

您也可以使用:

a)Virtual fields

$this->Booking->virtualFields = array(
  'reccount' => 'COUNT(*)',
  'totalpax' => 'SUM(Booking.pax)'
); // or put it in Booking model
$this->Booking->find('all', array('fields' => array('reccount', 'totalpax')));

b)$this->Booking->query();