Php 如何在YII中获取上月两个日期之间的数据?
我想获取上个月的数据,我正在使用下面的代码来执行此操作,但它对我来说无法正常工作: 这是我的密码:Php 如何在YII中获取上月两个日期之间的数据?,php,mysql,yii,Php,Mysql,Yii,我想获取上个月的数据,我正在使用下面的代码来执行此操作,但它对我来说无法正常工作: 这是我的密码: public function getLastMonth($user_id) { $criteria=new CDbCriteria; $criteria->condition = 'leave_from_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)'; $criteria->condition
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新手。提前感谢。当您第二次为条件指定值时,请在第一个条件上写入。将两者合并为一个条件。您还应该使用准备好的语句,而不是字符串插值:
$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=。。。三次。分配最后一个值并丢弃其余值的。给出了一个简单的解决方案
但是,在仔细研究您的逻辑之后,如果您不使用查询中的任何其他数据,实际上可以用更简单的求和查询来替换它。您提供的示例查询选择了更多数据,但您编写的函数没有使用它-不清楚您是否确实需要记录本身
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();
}
在php中输出SQL时,您看到了什么?它可能是在添加,也可能是在和。