ThinkPHP使用having时,同时使用分页会报错的解决方法

当使用ThinkPHP的分页查询时,如果与having同时使用,可能会出现错误。这是因为having会影响分页查询的结果。

解决方法是,先不要使用分页查询,先查询出所有数据,再使用array_slice函数对数据进行分页。示例代码如下:

$Model = M('table');
$count = $Model->where($map)->having($having)->count();//查询总数
$list = $Model->where($map)->having($having)->select();//查询所有数据
$list = array_slice($list, ($page-1)*$rows, $rows);//分页处理

这样就可以避免由于having影响分页查询导致的错误。

还有一种方法:
先获取执行的sql语句,再使用子查询的方法,参考代码如下

$sql = db('adminloginlog')->field("admin_id,admin_name, FROM_UNIXTIME(login_time,'%Y-%m-%d') AS login_date, COUNT(*) AS login_count, group_concat(distinct ip) AS ip_str,group_concat(distinct city,district) AS city_srt,COUNT(distinct ip) AS ip_count")->where($map)->group('admin_id, login_date')->having('login_count > 2 and ip_count > 1')->order('login_time DESC')->buildSql();
$res = Db::table($sql)->alias('a')->paginate(20);
$lists = $res->items();

你可能感兴趣的:(mysql)