使用 kaminari 对去重的语句进行分页时,生成的分页语句有问题:
logs = OperationLog.select(:user_id).where(interface_id: params[:interface_id]).page(param_page).per(param_limit).distinct.includes(:user)
生成的语句
-- 分页语句
SELECT DISTINCT `operation_logs`.`user_id` FROM `operation_logs` WHERE `operation_logs`.`interface_id` = 1 LIMIT 25 OFFSET 0
-- 查询关联用户
SELECT `users`.* FROM `users` WHERE `users`.`id` IN (150, 123, 175, 126, 133, 124)
-- 获取总记录数
SELECT DISTINCT COUNT(DISTINCT `operation_logs`.`id`) FROM `operation_logs` WHERE `operation_logs`.`interface_id` = 1
事实上总记录数并没有按 DISTINCT 指定的字段去重,导致总记录数是未去重的数量,
查了 kaminari 项目 README.md 和 google,都没找到解决方法,目前使用的是 Kaminari.paginate_array,对总结果分页,这样显然是不对的,记录数多了之后,性能有很大问题。
请问这个问题怎么解决?