2016-11-17 4 views
0

Можно ли найти cakephp с дополнительными условиями или мы можем умножить поле sum() с условной переменной? Я не знаю, какой может быть лучший вопрос, чтобы вы, ребята, знали, о чем я прошу. поэтому я даю более подробную информацию о вопросе. Я могу найти похожие данные с одним массивом с некоторым трюком. но я не могу найти для этого. Пожалуйста, помогите мне или дайте мне идею сделать такую ​​задачу. Благодарю.Cakephp sum() с умножением

Использование CakePHP 2.6

Я хочу найти данные из первой таблицы здесь ..

$incentiveweekly=$this->Incentive->find('all', 
      array('conditions' => 
       array( 
        "AND"=>array(
         "Incentive.fromdate >=" => $from, 
         "Incentive.todate <=" => $to 
        ) 
       ) 
      ) 
    ); 

    according to number of rows. I have to find another table 
Here is the result of above find condition. 
       Array 
      (
       [Incentive] => Array 
        (
         [id] => 2 
         [target1] => 3000 
         [price1] => 1.5 
         [target2] => 6000 
         [price2] => 2.5 
         [target3] => 8000 
         [price3] => 3.5 
         [formonth] => 
         [type] => 1 
         [fromdate] => 2016-11-13 
         [todate] => 2016-11-21 
         [updatedby] => 1 
         [created] => 2016-11-15 23:57:21 
         [modified] => 2016-11-15 23:57:21 
        ) 

      ) 
      Array 
      (
       [Incentive] => Array 
        (
         [id] => 3 
         [target1] => 3000 
         [price1] => 1.5 
         [target2] => 6000 
         [price2] => 2.5 
         [target3] => 8000 
         [price3] => 3.5 
         [formonth] => 
         [type] => 1 
         [fromdate] => 2016-11-24 
         [todate] => 2016-11-28 
         [updatedby] => 1 
         [created] => 2016-11-15 23:57:21 
         [modified] => 2016-11-15 23:57:21 
        ) 

      ) 

Теперь я хочу, чтобы найти массив в соответствии с номером записи массива.

$byweek=array(); // Storing Customer data by Target dates in array()    
    foreach ($incentiveweekly as $weekly){ 
     print_r($weekly); 
     $target3=$weekly['Incentive']['target3']; 
     $target2=$weekly['Incentive']['target2']; 
     $target1=$weekly['Incentive']['target1']; 
     $price3=$weekly['Incentive']['price3']; 
     $price2=$weekly['Incentive']['price2']; 
     $price1=$weekly['Incentive']['price1']; 
     $byweek[]=$customers=$this->Customer->find('all',array(
      'fields'=>array(
      'SUM(amount) AS amount', 
      'created_by' 
      ), 
      'group' => 'Customer.created_by', 
      'conditions' => array(
          "AND" =>array(
           "Customer.created >=" => $weekly['Incentive']['fromdate'], 
           "Customer.created <=" => $weekly['Incentive']['todate'] 
           ) 
          ), 
      'recursive'=>-1 ) 
        ); 
     //print_r($byweek); 
     } 

Я получаю результат, как ...

  Array 
      (
       [0] => Array 
        (
         [0] => Array 
          (
           [Customer] => Array 
            (
             [created_by] => 3 
            ) 

          ) 

        ) 

      ) 
      Array 
      (
       [0] => Array 
        (
         [0] => Array 
          (
           [Customer] => Array 
            (
             [created_by] => 3 
            ) 

          ) 

        ) 

       [1] => Array 
        (
         [0] => Array 
          (
           [Customer] => Array 
            (
             [created_by] => 1 
            ) 

          ) 

         [1] => Array 
          (
           [Customer] => Array 
            (
             [created_by] => 2 
            ) 

          ) 

        ) 

      ) 

Но я хочу, чтобы сумма будет умножаться с на, если другое состояние, когда я использую тройной оператор.

$value[0]['amount']>=$valuem['Incentive']['target3']?"Target Third":($value[0]['amount']>=$valuem['Incentive']['target2']?"Target Second":($value[0]['amount']>=$valuem['Incentive']['target1']?"Target First":"None")) 

Основная цель, чтобы найти подробную информацию. Я хочу создать поощрительную сумму, где общая сумма продаж должна соответствовать заданной целевой сумме. Если значение target1 равно одному, то стимулом будет общая сумма * price1 и та же самая с target2 и target3. где я использую оператора арендатора. Целевая цена должна быть умножена (по условию) с теми же данными условия поиска.

Я ищу в google и переполнении стека, но не могу найти его решения. Однако я благодарен переполнению стека и все, что вам нравится, я могу найти множество трюков и решений.

ответ

0

Благодаря Oldskool для этого решения Virtualfields with If Condition

Finaly I, Получил мои решения по этому коду ниже. Я получаю результат, как ожидалось. :)

  $this->Customer->virtualFields=array(
        'incentive' => "if(SUM(Customer.amount)>=$target3,(SUM(Customer.amount))*$price3,if(SUM(Customer.amount)>=$target2,(SUM(Customer.amount))*$price2,if(SUM(Customer.amount)>=$target1,(SUM(Customer.amount))*$price1,0)))", 
      ); 

Теперь я могу использовать Virtualfied, чтобы получить значение Incentive.

0

у меня нет точно, хотя вы можете попробовать ниже решения, как в моей мысли,

Вы должны использовать, когда близко в MYSQL,

$incenve = 'CASE WHEN amount>5000 THEN "FIRST Target" WHEN amount>3000 THEN "Second Target" ELSE 0 ' 

и внутри полей в приведенном выше запросе

'incentive' => $incentive 
+0

На самом деле, я хочу умножить общую сумму с суммой стимулов. Но сумма поощрения зависит от общей суммы, как если бы (сумма общей суммы> = целевая сумма 3, тогда сумма поощрения была бы равна цене3), но если (сумма общей суммы> = целевая сумма 2, тогда сумма поощрения была бы ценой2). – SAHAR

+0

Я думаю, что вы почти близки к моим решениям. Но я хочу знать, где я помещаю ваш код предложения. Внутри поискового запроса или вне поискового запроса. Если я помещаю его вне поискового запроса. Он не может найти сумму. – SAHAR

Смежные вопросы