2015-08-12 1 views
0

Я работаю над электронной коммерцией с платформой cakephp и использую диаграммы Google для отчетов. Мое требование - получить все записи в течение всех 12 месяцев, поэтому я использовал следующие код для одного месяцаCakephp получить все месячные записи с одним запросом, т.е. с одним поиском

Запрос

SELECT COUNT(*) AS count FROM orderproductmasters AS Orderproductmaster 
    LEFT JOIN ordermasters AS Ordermaster ON 
     (Orderproductmaster.ordermaster_id = Ordermaster.id) LEFT JOIN productmasters AS Productmaster ON 
     (Orderproductmaster.productmaster_id = Productmaster.id) 
     WHERE Ordermaster.orderstatusmaster_id = 1 AND Month(Orderproductmaster.created) = 8 

код

$this->Orderproductmaster->find('count', 
     array('conditions'=>array('Ordermaster.orderstatusmaster_id'=>1,' 
      Month(Orderproductmaster.created)'=>8))); 

Так, мне нужны записи, как за январь, февраль, март и все 12 месяцев ..., так что в течение 12 месяцев я использую следующий код

for($i=1;$i<13;$i++) 
{ 
    $orderproductmasters[$i] = $this->Orderproductmaster->find('count', 
     array('conditions'=>array('Ordermaster.orderstatusmaster_id'=>1, 
      'Month(Orderproductmaster.created)'=>$i))); 
} 

Так вопрос может быть глупо, но это возможно, чтобы получить все месяцы записи без использования для цикла, т. е. в рамках одного запроса. Заранее спасибо

+0

какие именно SQL запрос выполняется на сервере? –

+0

SELECT COUNT (*) AS 'count' FROM' orderproductmasters' AS 'Orderproductmaster' LEFT JOIN' ordermasters' AS 'Ordermaster' ON (' Orderproductmaster'''ordermaster_id' = 'Ordermaster''''') LEFT JOIN' productmasters' AS 'Productmaster' ON (' Orderproductmaster'.'productmaster_id' = 'Productmaster'.'id') WHERE' Ordermaster' .'orderstatusmaster_id' = 1 AND Month ('Orderproductmaster'.created') = 8 – Asim

+0

http: // stackoverflow.com/questions/2655614/cakephp-count-items-per-month-in-a-year может работать проверка – MKD

ответ

0
$options = array(); 
    $options['fields'] = array('COUNT(Orderproductmaster.id)'); 
    $options['conditions'] = array('Ordermaster.orderstatusmaster_id = 1', 
    'Month(Orderproductmaster.created) BETWEEN 1 AND 12'); 
    $options['joins'] = array(
          array(
          'table' => 'ordermasters', 
          'alias' => 'Ordermaster', 
          'type' => 'left', 
          'conditions' => array(
           'Orderproductmaster.ordermaster_id = Ordermaster.id' 
          ) 
         ), 
         array(
          'table' => 'productmasters', 
          'alias' => 'Productmaster', 
          'type' => 'left', 
          'conditions' => array(
          'Orderproductmaster.productmaster_id = Productmaster.id'     
          ) 
         ) 
                 ); 
      $options['group'] => array('Month(Orderproductmaster.created)');  
    $this->Orderproductmaster->find('all',$options); 
+0

Спасибо за ответ, но он не работает, мне нужен вывод, подобный этому, который я получаю для цикла Array ( [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 15 [9] => 0 [10] => 0 [11] => 0 [12] => 0 ) – Asim

0

Я думаю, ваша потребность может быть выполнено с помощью курсоров в хранимой процедуре. А затем используя хранимую процедуру для cake-php.

Пример на стороне БД here

0

Что О чем-то вроде:

$this->Orderproductmaster->find('count', 
     array(
    'fields'=>'DISTINCT(Month(Orderproductmaster.created)), 
    'conditions'=>array('Ordermaster.orderstatusmaster_id'=>1,' 
      Month(Orderproductmaster.created)'=>8))); 
Смежные вопросы