CakePHP способ группировки данных по месяцам из SQL - PullRequest
1 голос
/ 15 июня 2011

Например, у меня есть таблицы - 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+ пользователей и более 1000 для каждой таблицы Order.

Какой лучший способ сделать это в стиле CakePHP?

1 Ответ

1 голос
/ 28 июля 2011

Решение должно быть указано как ответ, а не как комментарий.В противном случае этот вопрос будет помечен как неотвеченный навсегда.

В любом случае ... это то, что вам нужно сделать, чтобы сгруппировать по:

$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-Condition

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...