CakePHP从SQL分组数据的方式

时间:2011-06-15 09:19:38

标签: sql cakephp

例如我有表 - Orders1,Orders2,Orders3,Users。

我需要为每个用户制作月度和季度报告。例如,我在Orders1模型quartal_sum_by_users($users, $quarter)中创建了一个函数。然后我做了这样的事情:

$cost = 0;
foreach($users as $user) {
  while($month <= 3) { // first three months
    $orders = $this->Order1->find('all', array(
      'recursive' => -1,
      'fields' => array('DISTINCT id', 'COALESCE(cost+work_cost+work_installation_cost, 0) AS amount'),
      'conditions' => array(
        'MONTH(date_ordered)' => $month,
        'YEAR(date_ordered)' => $year,
        'current_status' => 3
      )
    ));

    foreach($orders as $order) {
      $cost[$month] += $order[0]['amount'];
    }

    $month++;
  } // WHILE
} // FOREACH

所以,这是工作但非常缓慢(我正在迁移系统正在处理普通的PHP和SQL查询并且运行良好)并且我有400多个用户,每个Order表超过1000个。

以CakePHP风格实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

解决方案应该作为答案,而不是评论。否则,这个问题将被永久标记为未答复。

无论如何......这就是你需要做的分组:

$this->Order1->find('all', array(
  'recursive' => -1,
  'fields' => 'YOUR_FIELDS',
  'conditions' => 'YOUR_CONDITIONS',
  'group' => 'THE_FIELD_YOU_WANT_TO_USE_AS_GROUP'
));

选项组接受一个数组,因此您可以按多个字段进行分组。

对于更复杂的查询:book.cakephp.org/view/1030/Complex-Find-Conditions