当前使用版本(必填,否则不予处理)

3.5.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

mapper中自己写了一个多表的左连接,对其进行分页查询。

重现步骤(如果有就写完整)

mapper调用: pagenum=1 pagesize=5 其他参数都是空的 @Override public TableDataInfo getActivityPage(ActivityDTO activityDTO, PageQuery pageQuery) { Long shopId = LoginHelper.getShopId(); if (ObjectUtil.isNull(shopId)) { throw new ServiceException("请先登录"); } pageQuery.setIsAsc("desc"); pageQuery.setOrderByColumn("bai.activity_item_id"); QueryWrapper wrapper = Wrappers.query(); wrapper.isNull("2".equals(activityDTO.getType()), "bas.activity_id") .or() .ne("2".equals(activityDTO.getType()), "bas.shop_id", shopId) .isNotNull("1".equals(activityDTO.getType()), "bas.activity_id") .eq("1".equals(activityDTO.getType()), "shop_id", shopId) .like(StringUtils.isNotEmpty(activityDTO.getTitle()), "ba.title", activityDTO.getTitle()); Page activityItemPage = activityItemMapper.getPage(pageQuery.build(), wrapper); return TableDataInfo.build(activityItemPage);} SQL日志如下: JDBC Connection [HikariProxyConnection@1475735985 wrapping com.mysql.cj.jdbc.ConnectionImpl@6942ff10] will not be managed by Spring ==> Preparing: SELECT COUNT(*) AS total FROM biz_activity_item bai ==> Parameters: <== Columns: total <== Row: 15 <== Total: 1 ==> Preparing: SELECT bai.activity_item_id, bai.title, bas.activity_id, ba.title ba_title, ba.title_type, ba.attract_start_time, ba.attract_end_time, ba.show_start_time, ba.show_end_time FROM biz_activity_item bai LEFT JOIN biz_activity ba ON bai.activity_item_id = ba.activity_item_id LEFT JOIN biz_activity_shop bas ON ba.activity_id = bas.activity_id ORDER BY bai.activity_item_id DESC LIMIT ? ==> Parameters: 5(Long) <== Columns: activity_item_id, title, activity_id, ba_title, title_type, attract_start_time, attract_end_time, show_start_time, show_end_time <== Row: 16, 【箱包】行业日常活动, null, 12.1-12.7手表, 平台促销活动, 2021-11-24 00:00:00, 2121-11-30 23:59:59, 2021-12-01 00:00:00, 2121-12-07 23:59:59 <== Row: 16, 【箱包】行业日常活动, null, 12.15-12.21手表, 平台促销活动, 2021-12-08 00:00:00, 2121-12-14 23:59:59, 2021-12-15 00:00:00, 2121-12-21 23:59:59 <== Row: 16, 【箱包】行业日常活动, null, 12.22-12.28手表, 平台促销活动, 2021-12-22 00:00:00, 2121-12-28 23:59:59, 2021-12-29 00:00:00, 2121-12-31 23:59:59 <== Row: 16, 【箱包】行业日常活动, null, 12.22-12.28手表, 平台促销活动, 2021-12-15 00:00:00, 2121-12-21 23:59:59, 2021-12-22 00:00:00, 2121-12-28 23:59:59 <== Row: 16, 【箱包】行业日常活动, null, 12.8-12.14手表, 平台促销活动, 2021-12-01 00:00:00, 2121-12-07 23:59:59, 2021-12-08 00:00:00, 2121-12-14 23:59:59 <== Total: 5 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1db29726]

报错信息

返回total总数的是对的,但是返回的records的个数不对。本来应该以biz_activity_item分页,但是返回的records则以biz_activity分页了。这两个表是一对多关系,求解决,或者提供一种推荐的解决方案,谢谢

Comment From: miemieYaho

自己写分页,limit主表再join其他表

Comment From: mantoudaxiao

自己写分页,limit主表再join其他表

意思是在方法的业务逻辑处理?多表关联的sql解决不了这个问题是吗?

Comment From: fyakm

先查询主表limit,再join关联表