大家好,我目前遇到的问题是 PageHelper 分页后再排序会出现顺序错乱的问题:
PageHelper 也可以实现排序,不过它只能对表中的数据直接排序,我现在的需求是对非表中的数据进行排序,需要先分页后,然后对 list 进行 sort,但是这样的问题是:比如分页后对 price 排序,会存在第二页数据的 price 比第一页数据的 price 小的情况。
我想到的解决办法是全查出来,然后逻辑分页。。。不过数据量大肯定不行了,不知道有没有大佬遇到过这种问题,有的话帮忙解答一下,请喝奶茶!
1
Cbdy 2021-06-27 22:19:32 +08:00 1
写个 SQL 不好吗?
SELECT * FROM price_table ORDER BY price ASC LIMIT 20 OFFSET 10; |
2
daimubai OP @Cbdy 可能我没有表述清楚,这个 price 不是表中的数据,假设是一个需要通过查出来的数据计算出来的值,所以无法在 sql 中排序
|
3
daimubai OP @Cbdy 比如 表中有 a b c 三个字段,我的需求是根据 c 通过公式得出来的 d 排序,因此无法使用 sql 排序,因为 d 不在表中,而且我需要先查出来数据才能知道 d,但是这样就是会有第二页的 d 比第一页的 d 小的情况
|
4
fengpan567 2021-06-27 22:24:18 +08:00 1
手写 sql,连表查询。pagehelper 也支持手写的 sql 分页。
|
5
daimubai OP @fengpan567 大佬,您看下, 比如 表中有 a b c 三个字段,我的需求是根据 c 通过公式得出来的 d 排序,因此无法使用 sql 排序,因为 d 不在表中,而且我需要先查出来数据才能知道 d,但是这样就是会有第二页的 d 比第一页的 d 小的情况
|
6
fengpan567 2021-06-27 22:26:33 +08:00 1
@daimubai 建议你搞个字段把价格存起来,或者 sql 里把价格公式带进去。
|
7
daimubai OP @fengpan567 存起来这个我考虑下,因为我需要排序的字段很多,都需要公式,而且公式用到了工具类,挺复杂
|
9
daimubai OP @fengpan567 好像存起来也不行,因为不同用户计算的结果也不一样,,,
|
10
fengpan567 2021-06-27 22:31:03 +08:00
@daimubai 不能这么搞,数据量大服务会崩掉
|
12
cslive 2021-06-28 09:27:02 +08:00
SELECT RANK() over (order by (a+b) desc ) as rank from price_table
</br> 直接排序完完事 |
13
qwerthhusn 2021-06-28 09:57:06 +08:00
PageHelper 分页做的很暴力,查询 Count 的时候就是把你 SQL 外面套一层 select count(*) from (你的 SQL)
|
14
YzSama 2021-06-28 10:08:20 +08:00
楼上基本答案都告诉你了,
要快加个字段。 否则,先计算再分页。 分页在计算肯定不行的咯。 |
15
yazinnnn 2021-06-28 10:21:14 +08:00
你有没有考虑过是你的需求有问题呢
|
16
cobainlu 2021-06-29 13:05:16 +08:00
PageHelper.startPage(vo.getPageNum(),vo.getPageSize());
return PageUtil.getPageVO(sysLogMapper.selectAll(vo)); |
17
cobainlu 2021-06-29 13:07:05 +08:00
PageHelper.startPage(pagenum,pageSize);
//进行排序 List=dao.select(); return PageUtil.getPageVO(list); |