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

在使用ThinkPHP进行数据库操作时,如果在分页查询中结合HAVING条件,可能会导致错误。解决方法包括先获取全部数据再用array_slice进行分页,或者使用SQL子查询来避免影响分页。这两种方式可以确保HAVING不会错误地影响到分页结果。
摘要由CSDN通过智能技术生成

当使用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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都进步一点点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值