1. paginate和group by报错,代码如下,月份分组
$page = intval($where['page']);
$limit = intval($where['limit']);
$start_time = $where['start_time'];
$end_time = $where['end_time'];
$query = Db::table('eb_bonuslistlog')
->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
->group('date')
->order('date desc');
if ($start_time && $end_time) {
$query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
}
$list = $query->paginate(15);
return $list;
![](https://img-blog.csdnimg.cn/87bd415d0b4049ae8a8d267042b37578.png)
2. 第一种写法,group by分组后使用page分页, 月份分组
$page = intval($where['page']);
$limit = intval($where['limit']);
$start_time = $where['start_time'];
$end_time = $where['end_time'];
$query = Db::table('eb_bonuslistlog')
->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
->group('date')
->order('date desc');
if ($start_time && $end_time) {
$query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
}
$list = $query->page($page, $limit)
->select()
->toArray();
return $list;
3..第二种写法,group by分组后使用paginate分页,月份分组
$page = intval($where['page']);
$limit = intval($where['limit']);
$start_time = $where['start_time'];
$end_time = $where['end_time'];
$query = Db::table('eb_bonuslistlog')
->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
->group('date')
->order('date desc');
if ($start_time && $end_time) {
$query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
}
$buildSql = $query->buildSql();
$list = Db::table($buildSql)->alias('bs')->paginate(15);
return $list->toArray();
4. group by分组后使用paginate分页,按天分组
public function getZsyjDayReportStat(array $where)
{
$page = intval($where['page']);
$limit = intval($where['limit']);
$start_time = $where['start_time'];
$end_time = $where['end_time'];
// thinkphp中分页paginate和group by一起使用时代码异常,换下面写法
$query = Db::table('eb_bonuslistlog')
->field('DATE_FORMAT(create_time,"%Y-%m-%d") as date,SUM(money) as total_money,COUNT(*) as total_number')
->group('date')
->order('date desc');
if ($start_time && $end_time) {
$query->whereTime('create_time', 'between', [$start_time . ' 00:00:00', $end_time . ' 23:59:59']);
}
$buildSql = $query->buildSql();
$list = Db::table($buildSql)->alias('bs')->paginate(15);
return $list->toArray();
}