以前没怎么注意,不过最近写的一个后台管理项目中遇到了这个问题,后来查了下资料终于得到了解决。
问题讨论
问题描述:比如说我有两张表 ,一张老人护理情况表,一张护理情况照片表(可能存放多个图片或者多个视频)。要把老人护理完成之后拍照上传,进行一对多关联。用到了mp的querywrapper自定义条件构造器。
原来我写的sql是这样的
查出来的结果:小明一个护理订单里面关联了2张图片,小红和张三丰都是一张图片
这是返回的结果:
那么问题来了:可以看到total=4,因为我们数据库查到是四条数据(小明的那个订单一对多关联了两张图片),这就造成前端返回记录总数不对,当记录数超过15条/页时从而导致前端的点击切换下一页功能失效,
原理分析:
日志打印的sql语句:
Preparing:SELECT sn.id , sn.name
,m.real_name as manager_name , snp.photo_src FROM tb_seniors_nursing sn LEFT JOIN tb_manager m on sn.manager_id=m.id LEFT JOIN tb_seniors_nursing_photo snp on snp.seniors_nursing_id=sn.id WHERE sn.delete_flag=0 limit 15
问题就出再了limit的地方,15条/每页应该是limit 15,查询到15条他就停止了
后面的数据就不在查询,小明的订单关联了2个图片他就占了2个位置,导致数据减少。
问题解决
思路:先分页查询后映射数据结构。
简单来说就是先查询主体有几个护理订单保证total正确,再用collection用使用select属性传一个子查询再传参用column作为主表的column传入到从表
返回正确的数据:
PS:但是这样会影响数据库性能子查询会查询很多次
欢迎提供更好的办法讨论与交流