2013-09-28 2 views
0

Я использую cakephp 1.3. У меня есть поле даты в таблице доходов. Я пытаюсь получить общий доход в месяц в цикле. Следующим является мой запрос.Как Группировать все 12 месяцев в MySQL?

$income_and_hst = $Income->find('all', array(
          'fields' => array('SUM(Income.amount) as income', 
              'SUM(Income.hst_amount) as hst', 
              'MONTH(date) as month'), 
          'conditions' => array(
           'Income.income_account_id' => array(1,2,3,4), 
           'Income.user_id' => $this->Auth->user('id'), 
           'Income.account_id' => $this->Session->read('Account.default_account'), 
           'Income.date >' => $starting_date, 
           'Income.date <' => $ending_date, 
           ), 
          'group' => 'MONTH(date)', 
          ) 
         ); 

Это дает мне 5 месяцев дохода. Потому что доход был от 5 месяцев. Мне нужно показать все 12 месяцев, даже в других месяцах нет дохода. Если нет дохода, я хочу 0 за этот месяц.

Может кто-нибудь дать мне направление, пожалуйста?

спасибо.

ответ

0

Я предполагаю, что вы не можете этого сделать, используя этот интерфейс. Вам нужно либо погрузиться в необработанный SQL (и перекрестное соединение), либо добавить отсутствующие месяцы в окружающем PHP-коде. Я предлагаю последнее что-то вроде этого должно работать (псевдокод, я не помню синтаксис php):

for ($row in $income_and_hst) { 
    $income_and_hst_all[$row['month']] = $row 
} 

for ($month = 1;$month <= 12; $month++) { 
    if ($income_and_hst_all[$month] == nil) { 
     $income_and_hst_all[$month] = Array (
      'income' => 0, 
      'hst' => 0, 
      'month' => $month 
     ) 
    } 
}