簡體   English   中英

如何在YII中上個月的兩個日期之間獲取數據?

[英]how to get data between two dates of Last month in YII?

我想獲取上個月的數據,我正在使用下面的代碼來執行此操作,但它對我而言無法正常工作:

這是我的代碼:

public function getLastMonth($user_id)
{       
    $criteria=new CDbCriteria;

    $criteria->condition = 'leave_from_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)';
    $criteria->condition = 'leave_to_date <= DATE_SUB(CURDATE(), INTERVAL 1 DAY)';
    $criteria->condition = "user_id = $user_id";
    $data = Leaves::model()->findAll($criteria);
    $lastMonthR = 0;
    foreach($data as $lastMonth)
     {
         $lastMonthR += $lastMonth->total_leaves_hours;
     }      
    //return lastMonthR CHtml::encode($lastMonthR);
    return $lastMonthR;
}

我想得到與以下查詢在MySQL中相同的結果:

SELECT *,sum(total_leaves_hours) FROM tbl_leaves
WHERE leave_from_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND 
leave_to_date <= DATE_SUB(CURDATE(), INTERVAL 1 DAY) ;

當我運行YII的代碼(如上所示)時,它向我顯示了表的所有數據,請幫助我我是YII的新手。 提前致謝。

第二次為condition分配值時,將覆蓋第一個條件。 將兩者合並為一個條件。 您還應該使用准備好的語句而不是字符串插值:

$criteria->condition = 'leave_from_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
      AND leave_to_date <= DATE_SUB(CURDATE(), INTERVAL 1 DAY
      AND user_id = :id';

$data = Leaves::model()->findAll($criteria, array (':id'=>$user_id));

您寫了$criteria->condition = ... 3次。 這將分配最后一個值,並丟棄其余的值。 喬尼的答案給出了一個簡單的解決方案。

但是,仔細查看邏輯之后, 如果您不使用查詢中的任何其他數據,則實際上可以將其替換為更簡單的SUM查詢。 您提供的示例查詢選擇了更多數據,但是您編寫的函數並未使用它-尚不清楚您是否真正需要記錄本身。

public function getLastMonth($user_id) {
    $cmd = Yii::app()->db->createCommand()
      ->select('SUM(total_leaves_hours)')
      ->from(Leaves::model()->tableName())
      ->andWhere('leave_from_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)')
      ->andWhere('leave_to_date <= DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
      ->andWhere('user_id = :user_id', array(
        ':user_id' => $user_id,
      ))
    ;

    return $cmd->queryScalar();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM